iOS6中Apple继续扩展了一些控件的可定义性。对于不是特别追求UI的开发团队或者实力有限的个人开发者来说这会是一个不错的消息,使用现有的资源和新加的API,可以快速开发出界面还不错的应用。
+ (BOOL)wantsDefaultContentAppearance;返回NO的话,将以新的立体方式显示popover。
具体关于UIPopoverBackgroundView的用法,可以参考文档
@property (nonatomic,retain) UIColor *tintColor;这个属性定义颜色。
- (void)setBackgroundImage:(UIImage*)image forState:(UIControlState)state;
- (void)setDividerImage:(UIImage*)image forLeftSegmentState:(UIControlState)left rightSegmentState:(UIControlState)right;
- (void)setIncrementImage:(UIImage *)image forState:(UIControlState)state;
- (void)setDecrementImage:(UIImage *)image forState:(UIControlState)state; 可以定义背景图片、分隔图片和增减按钮的图片,都很简单明了,似乎没什么好说的。
@property (nonatomic, retain) UIColor *tintColor;
@property (nonatomic, retain) UIColor *thumbTintColor;
@property (nonatomic, retain) UIImage *onImage;
@property (nonatomic, retain) UIImage *offImage; 其中thumbTintColor指的是开关的圆形滑钮的颜色。另外对于on和off时候可以自定义图片,那么很大程度上其实开关控件已经可以完全自定义,基本不再需要自己再去实现一次了..
@property (nonatomic,retain) UIImage *shadowImage;这个不太清楚,没有自己实际试过。以后有机会做个小demo看看可以…
- (void)setBackgroundImage:(UIImage *)bgImage forState:(UIControlState)state style:(UIBarButtonItemStyle)style barMetrics:(UIBarMetrics)barMetrics;这个非常有用…以前在自定义UINavigationBar的时候,对于BarButtonItem的背景图片的处理非常复杂,通常需要和designer进行很多配合,以保证对于不同宽度的按钮背景图都可以匹配。现在直接提供一个UIImage就OK了..初步目测是用resizableImageWithCapInsets:做的实现..很赞,可以偷不少懒~
+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale;
- (id)initWithData:(NSData *)data scale:(CGFloat)scale;
+ (UIImage *)imageWithCIImage:(CIImage *)ciImage
scale:(CGFloat)scale
orientation:(UIImageOrientation)orientation;
- (id)initWithCIImage:(CIImage *)ciImage
scale:(CGFloat)scale
orientation:(UIImageOrientation)orientation; 指定scale=2之后即可对retina屏幕适配,相对来说还是比较简单的。
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier;将一个类注册为某个重用ID。
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;将指定indexPath的cell重用(若不能重用则返回nil,在StoryBoard会自动生成一个新的cell)。
另外,对UITableView的Header、Footer和Section分隔添加了一系列的property以帮助自定义,并且加入了关于Header和Footer的delegate方法。可以说对于TableView的控制更强大了…
相对与现在已有的开源下拉刷新来说,功能上还不那么强大,可自定义的内容不多,而且需要iOS6以后的系统,因此短期内还难以形成主流。但是相比开源代码,减去了拖源码加库之类的麻烦,并且和系统整合很好,再加上Apple的维护,相信未来是有机会成为主流的。现在来说的话,也就只是一种实现的选择而已。
而UICollectionView可以说是非常强大..强大到基本和UITableView一样了..至少使用起来和UITableView一样,用惯了UITableView的童鞋甚至可以不用看文档就能上手。一样的DataSource和Delegate,不同之处在于多了一个Layout对象对其进行排列的设定,这个稍后再讲。我们先来看Datasource和Delegate的API
//DataSource
-numberOfSectionsInCollectionView:
-collectionView:numberOfItemsInSection:
-collectionView:cellForItemAtIndexPath:
//Delegate
-collectionView:shouldHighlightItemAtIndexPath:
-collectionView:shouldSelectItemAtIndexPath:
-collectionView:didSelectItemAtIndexPath: 没什么值得说的,除了名字以外,和UITableView的DataSource和Delegate没有任何不同。值得一提的是对应的UICollectionViewCell和UITableViewCell略有不同,UICollectionViewCell没有所谓的默认style,cell的子view自下而上有Background View、Selected Background View和一个Content View。开发者将自定义内容扔到Content View里即可。
需要认真看看的是Layout对象,它控制了整个UICollectionView中每个Section甚至Section中的每个cell的位置和关系。Apple提供了几种不错的Layout,足以取代现在常用的几个开源库,其中包括了像Linkedin和Pinterest的视图。可以说Apple对于利用AppStore这个平台,向第三方开发者进行学习的能力是超强的。
关于UICollectionView,在之后有两个session专门进行了讨论,我应该也会着重看一看相关内容,之后再进行补充了~
于是Apple这次做了一个惊人的决定,直接在iOS6里把viewWillUnload和viewDidUnload标注为了Deprecated,并且不再再会调用他们。绝大部分开发者其实是对iOS3.0以来就伴随我们的viewDidUnload是有深深的感情的,但是现在需要和这个方法说再见了。对于使用iOS6 SDK的app来说不应该再去实现这两个方法,而之前在这两个方法中所做的工作需要重新考虑其更合适的位置:比如在viewWillDisappear中去移除observer,在dealloc中将outlet置为nil等。
@property (nonatomic, copy) NSString *restorationIdentifier;通过在用户点击Home键时的一系列delegate里对现有的view进行编码存储后,在下一次打开文件时进行解码恢复。更多的详细内容之后也会有session进行详细说明,待更新。