|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
语法弄明白@interface@property这些工具总要知道是干嘛的怎么用基础库当iOS7刚公布的时分,全球的苹果开辟职员都立马实验着往编译他们的app,接着再花上数月的工夫来修复任何呈现的妨碍,乃至重做app。如许的了局,使得人们基本得空往探求iOS7所带来的新工具。一些分明而渺小的更新,好比说[NSArrayfirstObject],这个办法可追溯到iOS4时期,如今被提为私有API,除此以外,另有良多埋没的特征等着我们往发掘。
光滑淡进淡出动画
我这里要会商的并不是新的弹性动画APIs大概UIDynamics,而是一些更渺小的工具。CALayer增添了两个新办法:allowsGroupOpacity和allowsEdgeAntialiasing。如今,组不通明度(groupopacity)不再是甚么奇怪的工具了。iOS会屡次利用存在于Info.plist中的键UIViewGroupOpacity并可在使用程序局限内启用或禁用它。关于年夜多半apps而言,这(译注:启用)并不是所希冀的,由于它会下降全体功能。在iOS7中,用SDK7所链接的程序,这项属性默许是启用的。当它被启用时,一些动画将会变得不流利,它也能够在layer层上被把持。
一个风趣的细节,假如allowsGroupOpacity启用的话,_UIBackdropView(在UIToolbar大概UIPopoverView中的背景视图)不克不及对其含混举行动画处置,以是当你做一个alpha转换时,你大概会一时禁用这项属性。由于这会下降动画体验,你能够回退到旧的体例然后在动画时代一时启用shouldRasterize。别忘了设置得当的rasterizationScale,不然在retina的设备上这些视图会成锯齿状。
假如你想要复制的Safari显现一切选项卡时的动画,那末边沿抗锯齿属性将变得十分有效。
堵塞动画
一个小但十分有效的新办法[UIViewperformWithoutAnimation:]。它是一个复杂的封装,先反省动画以后是不是启用,然后克制动画,实行块语句,最初从头启用动画。一个必要申明的中央是,它其实不会堵塞基于CoreAnimation的动画。因而,不必急于将你的办法挪用从:
1
2
3
4
[CATransactionbegin];
[CATransactionsetDisableActions:YES];
view.frame=CGRectMake(...);
[CATransactioncommit];
交换为:
1
2
3
[UIViewperformWithoutAnimation:^{
view.frame=CGRectMake(...);
}];
可是,尽年夜多半情形下如许也能事情的很好,只需你不间接处置CALayers。
iOS7中,我有良多代码路径(次要是UITableViewCells)必要分外的回护,避免不测的动画,比方,假如一个弹窗的巨细调剂了,那末同时显现中的表视图将由于高度的变更而加载新的cell。我一般的做法是将全部layoutSubviews的代码包扎到一个动画块中:
1
2
3
4
5
6
7
8
-(void)layoutSubviews
{
//OtherwisethepopoveranimationcouldleakintoourcellsoniOS7legacymode.
[UIViewperformWithoutAnimation:^{
[superlayoutSubviews];
_renderView.frame=self.bounds;
}];
}
处置长表视图
UITableView十分疾速高效,除非你入手下手利用tableView:heightForRowAtIndexPath:,它会入手下手为你表中恣意元素挪用此办法,即使没有可视对象,就好比其内涵的UIScrollView只是往猎取准确的contentSize。此前有一些变通办法,但都欠好用。iOS7中,苹果公司终究供认这一成绩,并增加tableView:estimatedHeightForRowAtIndexPath:,这个办法提早了实践转动工夫本钱的年夜部分。假如你不晓得一个cell的巨细,前往UITableViewAutomaticDimension便可。
关于节头/尾(sectionheaders/footers),如今也有相似的API了。
UISearchDisplayController
苹果的searchcontroller利用了新的技能来简化挪动searchbar到navigationbar的历程。启用displaysSearchBarInNavigationBar就能够了(除非你还要用到scopebar,我只能说你真不幸)。我却是很喜好这么做,但对照遗憾的是,iOS7上的UISearchDisplayController貌似被培植的对照严峻,特别是iPad。苹果公司看上往像是没工夫处置这个成绩的模样(原文:Appleseemstohaverunoutoftime),关于显现的搜刮了局其实不会埋没实践的表视图。在iOS7之前,这并没有成绩,可是如今searchResultsTableView有一个通明的背景致,使它看上往相称糟。作为一种变通办法,你能够设置不通明色大概取道于富于技能的手腕来取得你所希冀的。关于这个控件会呈现林林总总的了局,当利用displaysSearchBarInNavigationBar时乃至不会展现搜刮表视图。
你的了局大概有所分歧,但我是利用了一些手腕来让displaysSearchBarInNavigationBar事情的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-(void)restoreOriginalTableView
{
if(PSPDFIsUIKitFlatMode()&&self.originalTableView){
self.view=self.originalTableView;
}
}
-(UITableView*)tableView
{
returnself.originalTableView?:[supertableView];
}
-(void)searchDisplayController:(UISearchDisplayController*)controller
didShowSearchResultsTableView:(UITableView*)tableView
{
//HACK:iOS7requiresacruelworkaroundtoshowthesearchtableview.
if(PSPDFIsUIKitFlatMode()){
if(!self.originalTableView)self.originalTableView=self.tableView;
self.view=controller.searchResultsTableView;
controller.searchResultsTableView.contentInset=UIEdgeInsetsZero;//Remove64pixelgap
}
}
-(void)searchDisplayController:(UISearchDisplayController*)controller
didHideSearchResultsTableView:(UITableView*)tableView
{
[selfrestoreOriginalTableView];
}
这里,别忘了在viewWillDisappear中挪用restoreOriginalTableView,不然会发送crash。
记着这是独一的办理举措;大概有很多保守的办法不交换视图自己,但这个成绩的确应当由苹果公司来修复。(TODO:RADAR!)
分页
UIWebView利用了新的技能来主动分页带paginationMode的网站。有一年夜堆与此功效相干的新属性:
1
2
3
4
5
@property(nonatomic)UIWebPaginationModepaginationModeNS_AVAILABLE_IOS(7_0);
@property(nonatomic)UIWebPaginationBreakingModepaginationBreakingModeNS_AVAILABLE_IOS(7_0);
@property(nonatomic)CGFloatpageLengthNS_AVAILABLE_IOS(7_0);
@property(nonatomic)CGFloatgapBetweenPagesNS_AVAILABLE_IOS(7_0);
@property(nonatomic,readonly)NSUIntegerpageCountNS_AVAILABLE_IOS(7_0);
如今而言,固然这大概并不是关于年夜多半网站都有效,但它一定是天生复杂的电子书浏览器或显现文本的一种更好的体例。加点乐子的话,请实验将它设置为UIWebPaginationModeBottomToTop。
会飞的Popovers
想晓得为何你的popovers疯了一样各处乱飞?在UIPopoverControllerDelegate协定中有一个新的代办署理办法使你能把持它:
<p>1
2
3
-(void)popoverController:(UIPopoverController*)popoverController
<p> |
|