UITableView 拉动卡原因

原创 2012年03月22日 11:18:11

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

   创建新线程去下载资源



iOS-圆角设置性能优化

查阅了好些关于圆角性能优化的帖子,总结下记录下来. 首先: DSImageViewRound 使用方法 iOS图片高性能设置圆角一般我们在iOS开发的过程中设置圆角都是如下这样设置的。 avat...

[个性化你的App]iOS:实现类似于google+的tableviewcell卡片式插入效果

经常可以看到一些主流的应用都使用了很漂亮的动画效果,这必然可以给用户更好的体验.如果我们的应用只使用cocoa框架自带的那些效果, 如何能在appstore众多的应用里脱颖而出呢? 上一次我写了如何实...

影响 UITableView 滚动的流畅性的原因

1、 在代理方法中做了过多的计算占用了 UI 线程的时间 2、同上 3、Cell 中 view 的组织复杂 关于第一点,首先要明白 tableview 的代理(这里指 datasource 和 ...

PullToRefresh源码分析(Ⅲ)从源码分析PTRListView不足屏时上拉动画有2个的原因

PullToRefreshListView在数据不足屏时上拉刷新会出现上下2个动画。见下图,这篇博文将从源码入手来分析这个问题...

增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略

原文地址:http://blog.csdn.net/silenceburn/article/details/6083375 写的不错,刚好遇到类似的一个问题,就看到他的文章了。转过来收藏!   ...

mini2440烧卡失败的两个原因总结

本次总结的失败原因都和commandLine没填或者填错有关系。 1.No OS found 现象 原因是commandline没有填写,由于烧录的superboot2440.bin为友...

增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略

转自:http://blog.csdn.net/silenceburn/article/details/6083375 如有错漏请不吝拍砖指正,转载请注明出处,非常感谢     有一个问...

在Win7下“显卡驱动已停止响应...”的几种原因和解决办法

1、驱动不兼容,该问题只有少部分人存在,确确实实也是有这种问题的,以前我也碰到过一次,换到最新的驱动之后经常出现。 对于这种情况的解决办法,新驱动并不是最好的,尽量更换一些旧版本的驱动程序尝试。 ...
  • Gnorth
  • Gnorth
  • 2012年05月14日 09:12
  • 3845

解决鼠标指针移动时出现停顿卡的原因

通常,鼠标发生停顿是鼠标的灵敏度变差,灵敏度变差是光电鼠标的常见故障,具体表现为移动鼠标时,光标反应迟钝,不听指挥。这种硬件故障建议就是马上换个新的鼠标。不过,最好是通过以下的故障原因排除来验证,鼠标...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UITableView 拉动卡原因
举报原因:
原因补充:

(最多只允许输入30个字)