关闭

UITableView 拉动卡原因

3464人阅读 评论(0) 收藏 举报

(1)

经测试:对性能影响很大

self.imageView.clipsToBounds = YES;

测试方法:

直接修改UITableViewCell的imageView, 修改前后,界面差别很大



(2) 直接绘制cell 导致问题


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    [selfconfigCell:(detailListViewTabelCell *)cellIndexPath:indexPath ];

    [cellsetNeedsDisplay]; //如果直接绘制, 就需要在每个CELL显示时刷新,这是导致了界面慢的原因

}



tableView 的性能优化:

(1)使用不透明视图。
不透明的视图可以极大地提高渲染的速度。因此如非必要,可以将table cell及其子视图的opaque属性设为YES(默认值)。
其中的特例包括背景色,它的alpha值应该为1(例如不要使用clearColor);图像的alpha值也应该为1,或者在画图时设为不透明。


(2)减少视图的数目

UITableViewCell包含了textLabel、detailTextLabel和imageView等view,而你还可以自定义一些视图放在它的contentView里。然而view是很大的对象,创建它会消耗较多资源,并且也影响渲染的性能。
如果你的table cell包含图片,且数目较多,使用默认的UITableViewCell会非常影响性能。奇怪的是,使用自定义的view,而非预定义的view,明显会快些

。当然,最佳的解决办法还是继承UITableViewCell,并在其drawRect:中自行绘制:
不过这样一来,你会发现选中一行后,这个cell就变蓝了,其中的内容就被挡住了。

最简单的方法就是cell.selectionStyle = UITableViewCellSelectionStyleNone;, 这样就不会被高亮了。
此外还可以创建CALayer,将内容绘制到layer上,然后对cell的contentView.layer调用addSublayer:方法。layer并不会显著影响性能,但如果layer透明,或者有圆角、变形等效果,就会影响到绘制速度了。


(3)不要做多余的绘制工作。
在实现drawRect:的时候,它的rect参数就是需要绘制的区域,这个区域之外的不需要进行绘制。
例如上例中,就可以用CGRectIntersectsRect、CGRectIntersection或CGRectContainsRect判断是否需要绘制image和text,然后再调用绘制方法


(4)预渲染图像

在bitmap context里先将其画一遍,导出成UIImage对象,然后再绘制到屏幕。此步很重要! 参考<利用预渲染加速iOS设备的图像显示>


(5)不要阻塞主线程

   创建新线程去下载资源



1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:456934次
    • 积分:7051
    • 等级:
    • 排名:第3382名
    • 原创:156篇
    • 转载:76篇
    • 译文:12篇
    • 评论:77条
    最新评论