【发布时间】:2010-08-09 16:01:52
【问题描述】:
我有一个由许多图像组成的自定义 UIView,它们的位置会随着用户触摸而变化。 视图必须跟踪用户触摸,而我在绘制此类视图时遇到了性能瓶颈,阻止了我实时跟踪输入。
一开始我在[UIView drawRect:] 方法中绘制所有内容,当然它太慢了,因为即使没有必要,所有内容都被重新绘制。
然后,我使用了更多的 CALayers 来仅更新正在更改的图层,这给了我更好的响应能力。
但是,当我必须在一个图层上多次绘制相同的图像时,最多需要 500 毫秒。
由于图像放置在固定位置,是否可以预先绘制它们?我是否应该考虑将它们放在许多 CALayers 中并隐藏/显示它们?
另外,我不明白为什么存在[CALayer setNeedsDisplayInRect:],但代表(显然)无法知道无效的矩形是什么来优化绘图。
解决方案
按照答案中的建议,我终于为图像创建了许多 CALayers,并在第一次显示图层时设置了 contents 属性。这是一个延迟加载的折衷方案:在第一次尝试中,我在创建时设置了每一层的内容,但这会导致在程序启动时预先绘制任何可能的图像,从而将应用程序冻结几秒钟。
【问题讨论】:
标签: iphone optimization quartz-graphics