我可以强制CALayer使用setNeedsDisplayInRect:而不是setNeedsDisplay用于自定义属性

时间:2012-03-08 06:13:40

标签: macos cocoa core-animation calayer

我有自定义属性,我覆盖+needsDisplayForKey:以返回此属性的YES。 我的-drawInContext:方法相当复杂,而受我的自定义属性影响的矩形非常小。我想优化它。

我正在考虑的解决方案是实现自定义setter,我将明确标记要显示的受影响的矩形。我不确定的一件事是这样的实现将等于原始实现并将处理隐式动画。 (rdar:// 11008555)

它是平等还是有更好的解决方案? (目标平台为10.6 +)

1 个答案:

答案 0 :(得分:0)

无法绘制CALayer的一部分。核心动画层在OpenGL表面上实现为纹理。当您实现自定义绘图时,实质上发生的是您的绘图命令用于构建位图,然后该位图被设置为CALayer的OpenGL表面的纹理。

您可以做的是自己管理图层的位图缓存(使用NSImageCGContext)。这样您就可以修改需要重绘的位图部分,然后使用setContents:将图像绘制到图层。