UITableView 拉动卡原因

(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)不要阻塞主线程

   创建新线程去下载资源



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blue_Dream_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值