码迷,mamicode.com
首页 > 其他好文 > 详细

UITableView的 beginUpdates 和 endUpdates<转>

时间:2017-06-02 14:50:29      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:nslog   remove   com   pos   object   obj   selectrow   adr   img   

先看Apple API Reference中对这两个方法的描述

beginUpdates

技术分享

endUpdates

技术分享

从上述描述中我们大概可以总结出四点

1、beginUpdates 和 endUpdates必须成对使用

2、使用beginUpdates和endUpdates可以在改变一些行(row)的高度时自带动画,并且不需要Reload row(不用调用cellForRow,仅仅需要调用heightForRow,这样效率最高)。

3、在beginUpdates和endUpdates中执行insert,delete,select,reload row时,动画效果更加同步和顺滑,否则动画卡顿且table的属性(如row count)可能会失效。

4、在beginUpdates 和 endUpdates中执行 reloadData 方法和直接reloadData一样,没有相应的中间动画。


针对上面几点举几个栗子

1、改变Row的高度

直接调用

[self.tableViewbeginUpdates];

[self.tableViewendUpdates];

接着tableview回调-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath,调整每一行的高度。

技术分享
技术分享

2、同时insert,delete,select reload

[self.tableViewbeginUpdates];

[self.testArrayinsertObject:@(-1)atIndex:0];

[self.tableViewinsertRowsAtIndexPaths:@[[NSIndexPathindexPathForRow:0inSection:0]]withRowAnimation:UITableViewRowAnimationAutomatic];

[self.testArrayremoveObjectAtIndex:3];

[self.tableViewdeleteRowsAtIndexPaths:@[[NSIndexPathindexPathForRow:2inSection:0]]withRowAnimation:UITableViewRowAnimationAutomatic];

[self.tableViewselectRowAtIndexPath:[NSIndexPathindexPathForRow:3inSection:0]animated:YESscrollPosition:UITableViewScrollPositionMiddle];

[self.tableViewreloadRowsAtIndexPaths:@[[NSIndexPathindexPathForRow:4inSection:0]]withRowAnimation:UITableViewRowAnimationAutomatic];

[self.tableViewendUpdates];

技术分享

如何在做完动画之后执行某个方法呢?

 

[CATransactionbegin];

[CATransactionsetCompletionBlock:^{

NSLog(@"aferCompletionBlock");

}];

[self.tableViewbeginUpdates];

[self.tableViewendUpdates];

[CATransactioncommit];

如何控制动画的执行时间呢?

[UIViewanimateWithDuration:2.0fdelay:0.0options:UIViewAnimationOptionCurveEaseInOutanimations:^{

[CATransactionbegin];

[CATransactionsetCompletionBlock:^{

NSLog(@"after2");

}];

[self.tableViewbeginUpdates];

[self.tableViewendUpdates];

[CATransactioncommit];

NSLog(@“after1”);

}completion:^(BOOLfinished) {

NSLog(@"after3");

}];

输出顺序: after1->after2->after3

利用UIView的动画的执行时间来控制beginUpdates和endUpdates的动画时间。

UITableView的 beginUpdates 和 endUpdates<转>

标签:nslog   remove   com   pos   object   obj   selectrow   adr   img   

原文地址:http://www.cnblogs.com/deng37s/p/6933086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!