加载图像时,UITableView上的滚动如此不稳定是什么原因?是因为他们需要添加为子视图吗?或者是因为图像需要缓存?既?
答案 0 :(得分:6)
因为它们被添加为子视图,并且绘制子视图需要很多工作,因为它们必须被合成。当Core Graphics或Core Animation使用这些子视图绘制多个单元格时更是如此。
Loren Brichter (atebits)更好地解释了:
就像在Mac OS X上一样,iPhone上有两个绘图系统。一个是CoreGraphics,另一个是LayerKit CoreAnimation。 CoreGraphics确实利用了CPU,CoreAnimation确实利用了它认为最快的东西 - 很可能是GPU。
iPhone上的GPU讨厌混合,这就是为什么Apple建议您保持尽可能多的视图不透明。有时你别无选择 - 如果你在图像上有标签,你就不得不将标签透明化,否则会在文字周围出现一个很难看的块。
开发人员要做什么?当然,将CoreGraphics预先混合到您自己的视图中。如果您根据需要将所有内容混合到一个静态视图中(例如,当一个表格视图在屏幕上移动一个单元格时),对于第一帧来说,它的成本会更高一些,但CoreAnimation之后的每一帧都只处理一个大的不透明的质地......它喜欢它。它不仅仅是混合。如果你考虑过度绘制的情况,每个表单元格有一个大视图是一个很大的胜利,因为CoreAnimation只会触摸屏幕上的一个给定像素而不是多次(可能,取决于你的旧重叠多少)查看层次结构)。
答案 1 :(得分:0)
老实说,我不确定该回答什么。
我所知道的是,当我有一个非常“重”的UITableView,需要它快速滚动时,我使用Tweetie的创建者的方法:
http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/
从来没有找到比这更好的方法。