是否有任何内置功能可以在 drawLayer:inContext: 调用之间维护 CALayer 的内容?现在,我将图层复制到缓冲区,并在每次调用drawLayer:inContext:时从缓冲区重新绘制图像,但我想知道 CALayer 是否有办法自动执行此操作...
我不相信是这样。 “drawInContext”将清除底层缓冲区,以便您可以绘制它。但是,如果您放弃drawInContext
or drawRect
方法,你可以将你的layer.contents设置为CGImage并且它将被保留。
我个人几乎在所有日常工作中都会这样做。我覆盖- (void) setFrame:(CGRect)frame
检查帧大小是否已更改。如果它发生了变化,我会使用正常的绘图例程重新绘制图像,但会进入上下文:UIGraphicsBeginImageContextWithOptions(size, _opaque, 0);
。然后我可以抓取该图像并将其设置到 imageCache:cachedImage = UIGraphicsGetImageFromCurrentImageContext();
。然后我将layer.Contents 设置为CGImage。我用它来帮助缓存我的绘图,尤其是在新的 iPad 上,它在许多绘图例程上都很慢,而 iPad 2 甚至不眨眼。
此方法的其他优点: 如果您设置单独的共享缓存,则可以在视图之间共享缓存的图像。如果您管理好缓存,这确实可以帮助您减少内存占用。 (提示:我使用 NSStringFromCGSize 作为共享图像的字典键)。此外,您实际上可以在不同的线程上分离绘图例程,然后在完成后设置图层内容。这可以防止您的绘图例程阻塞主线程(在这种情况下,当前图像可能会被拉伸,直到设置新图像为止)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)