IOS 非常流畅的滑动tableView

为什么要写这篇文章呢?之前写过一篇,因为手机打字不是很方便,还有之前同事用6splus 定下午茶时候,我滑动列表时候竟然误以为是安卓系统的手机。

?

tableview 流畅度可以用fps来测试,到60帧说明你优化tableView 已经很有经验了。

如下图怎么测试

接下来从哪方面入手来优化呢?

优化tableView主要有两个思路。缓存操作和异步操作。

?

问题一:

新人写tableView ,在下面方法中

频繁的创建cell 上的子控件并且添加到cell 上,这是一个要注意的地方,因为这样频繁的创建控件和添加会增加CPU的消耗,间接掉帧。

解决方法呢:在cell 里面如下方法

?

?

把所有的控件都创建好。通过隐藏来控制不同类型的cell显示。如下图示意:

?

我再解释下。我先按照上图把控件都创建好了。如果没有评论就隐藏掉如上图是隐藏的效果。这样就不会把评论的高度计算到cell高度里。如果图片们没有,那么就不会把图片算里面,视频分享链接就从朋友圈内容开始计算布局。以此类推。

?

?

?

问题二:

tableView 高度问题。tableView 会频繁的调用如下方法

?

来先确定它的contentSize及每个Cell的位置,然后再调用cellForRowAtIndexPath 来显示。

解决方案:在后台计算好高度以及布局,并缓存到内存重复使用。

后台计算cell 的高度然后放到集合里面下次继续使用。

问题三:有一些显示的内容有富文本,特别是从HTML 转化为属性字符串时候。

解决方案,后台提前转化需要的属性字符串,然后缓存起来避免重复转化带来的CPU性能消耗。可以参考DTCoreText从HTML转化属性字符串的思路,他就是GCD后台转化的。

问题四:图片圆角,阴影等操作,会引起离屏渲染。对CPU性能消耗。

解决方案:用一个图片盖上,或者后台就把图片绘制成圆角图片显示。

问题五:一些显示很多图片的地方,服务器的图片很大,不是你控件的大小。

解决方案:服务器返回控件宽高的图片,比如七牛可以在图片路径拼接参数来获取指定宽高。

问题六:视图层次复杂情况下,CPU把它们混合会很消耗资源

解决方案:如果不能避免,可以把你的视图绘制成一张图片来显示,当然渲染的过程在后台。可以参考VVeboTableViewDemo的思路。

还有一些其他的技巧,比如不用SB 和Xib 来创建cell 用纯代码来创建,抛弃自动布局用坐标来计算布局。虽然会牺牲很多时间

总之:把一些影响CPU的操作放到后台来操作,然后缓存一切可以缓存的东西。

?

时间: 2024-10-09 01:43:54

IOS 非常流畅的滑动tableView的相关文章

ios 小问题,滑动tableview,导航出去,再回来会保持原样,但我想自动保持顶部

在需要的页面: 加入 -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [TableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; } //ok

仿微博视频边下边播之滑动TableView自动播放-b

Tips:这次的内容分为两篇文章讲述01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器.02.[iOS]仿微博视频边下边播之滑动TableView自动播放 讲述如何实现在tableView中滑动播放视频,并且是流畅,不阻塞线程,没有任何卡顿的实现滑动播放视频.同时也将讲述当tableView滚动时,以什么样的策略,来确定究竟哪一个cell应该播放视频. 上篇文章讲述了封装一个边下边播,并且带有缓存功能的播放器.如果你还没有看,请点击跳转[iOS]仿

iOS-响应上下左右滑动手势

iOS-响应上下左右滑动手势 分类: iPhone开发2012-03-17 14:42 25489人阅读 评论(8) 收藏 举报 iosup -(void)viewDidLoad{ UISwipeGestureRecognizer *recognizer; recognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeFrom:)]; [recognizer setDir

iOS Dev (63) 如何在 TableView 滚动时收起键盘?

iOS Dev (63) 如何在 TableView 滚动时收起键盘? 作者:阿锐 地址:http://blog.csdn.net/prevention - - (void)scrollViewDidScroll:(UIScrollView *)scrollView { [_inputTextView resignFirstResponder]; } - 转载请注明来自:http://blog.csdn.net/prevention iOS Dev (63) 如何在 TableView 滚动时收

李洪强iOS开发之 - 指定刷新tableview的某一组

李洪强iOS开发之 - 指定刷新tableview的某一组

ios 中scrollview上面嵌套tableView,左右滑动出现数据多次刷新的问题

注意scrollView左右滑动时不要刷新数据,刚进来时一次性请求所有数据 红包纪录和房源信息可以左右滑动和点击,tableView可以上下滑动,图片部分个人信息只刷新一次. 界面布局如下

解决使用了属性overflow:scroll、overflow-y:scroll、overflow-x:scroll;的网页在iPhone iOS Safari浏览器中滑动不流畅问题

在使用了属性overflow:scroll.overflow-y:scroll.overflow-x:scroll;的元素上加上-webkit-overflow-scrolling: touch;即可 参考资料: 解决页面使用overflow: scroll在iOS上滑动卡顿的问题 网页在Safari快速滚动和回弹的原理: -webkit-overflow-scrolling : touch;的实现 -webkit-overflow-scrolling 带来的 BUG

iOS滑动tableView来改变导航栏的颜色-1

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {   [self.navigationController.navigationBar setBackgroundImage:[self imageWithBgColor:[UIColor colorWithRed:self.tableView.contentOffset.y/255 green:255/255 blue:255/255 alpha:1]] forBarMetrics:U

iOS滑动tableView来改变导航栏的颜色

- (void)viewDidLoad { [super viewDidLoad]; [self initTableView]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 10; } -