当使用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)

 }
    

要回复问题请先登录注册