当使用QuartzCore在UITableViewCell内的UIImageView上圆角化时,滚动体验缓慢

如何解决当使用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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?