如何解决当使用QuartzCore在UITableViewCell内的UIImageView上圆角化时,滚动体验缓慢
| 我在UITableView
的单元格中使用QuartzCore
将圆角添加到UIImageView
这是我使用的代码:
fooImageView.layer.cornerRadius = 9.0;
fooImageView.layer.masksToBounds = YES;
fooImageView.layer.borderWidth = 1.0;
问题是当我添加此代码时。表格单元格的移动大大减慢了速度。我只是想知道是否存在其他替代方法,以使用户在使用此技术滚动表视图单元格时可以更快地体验并提高性能?
当将圆角应用于其单元格中的图像时,我看到许多应用程序(大多数Twitter应用程序)的性能均未降低。只是想知道他们如何克服“呆滞”?
谢谢你的帮助。
解决方法
我使用3种主要技术来改善UITableView性能:
始终重复使用细胞,使用
带有标识符的可重用出队单元
在创建新单元格时。这个
防止操作系统的开销
创造和摧毁许多
快速滚动时的对象。
折叠视图的层次结构
细胞。而不是有很多
视图和子视图,创建自定义
查看并绘制所有单元格
drawRect。像Twitter这样的应用
这种用于超级快速单元格绘制的方法。
确保图像不透明。您可以通过确保所有图像资源都没有烘焙Alpha通道并将图层的opaque属性设置为YES来实现。
例子:
在cellForRowAtIndexPath中(表标识符字符串仅创建对相同类型的单元格的引用,并且可以是您喜欢的任何单元格):
static NSString *SimpleTableIdentifier = @\"SimpleTableIdentifier\";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: SimpleTableIdentifier];
// Create a new cell if necessary
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:SimpleTableIdentifier] autorelease];
}
请查看以下链接,以获取改善UITableViews性能的示例:http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40007318-Intro -DontLinkElementID_2
希望这可以帮助,
戴夫
,我要尝试做的第一件事是设置:
fooImageView.layer.shouldRasterize = YES;
这会将圆角效果渲染为位图。在大约6秒钟之前对视图使用CALayer效果时,我遇到了一些类似的问题,并且此设置大大提高了性能。
不要忘记设置
fooImageView.layer.rasterizationScale = [[UIScreen mainScreen] scale];
以防止像素化(以错误的设备分辨率光栅化)。
,您可以做一些掩饰。用蒙版图像覆盖图像,该蒙版图像带有圆角正方形,该蒙版图像被切掉,它将像魅力一样工作。
另外,请确保使用reuseCellIdentifier,否则即使表变得有些复杂,表也会滞后。
,简短答案:将细胞设置为不透明并自己绘制。
遵循StuDave和Magic Bullet的建议,并参阅Twitter官方客户端的作者使用UITableView在Tweetie中进行快速滚动,以了解如何进行单元格绘制。这是一个简单明了的示例项目。
除了解决此特定问题外,您还应该阅读Matt Gallagher撰写的UITableView的构造,绘图和管理(已重新访问),以了解如何编写自定义表格控制器和单元格。这不仅可以提高代码的性能,还可以让您执行Apple的标准类无法完成的工作。基本上,您将创建一个UIViewController
,该ѭ复制UITableViewController
的关键方法。
,就我而言,它添加了无尽的子视图,而表视图的速度却完全按照您所说的那样大大降低了。我在ѭ10中添加了此逻辑以解决此问题:
if cell.contentView.subviews.count < 3 /* elements in cell + subviews */ {
cell.contentView.addSubview(subView)
cell.contentView.sendSubviewToBack(subView)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。