CALayer可见区域变化时的通知?

时间:2013-02-13 20:02:19

标签: ios macos core-animation

我有一个CALayer,我只为可见区域提供内容(有点类似于CATiledLayer)。问题是,当CALayer的可见区域发生变化以便调用displayLayer时,似乎没有办法接收通知。我目前是子类并挂钩setPosition,setBounds和setTransform,但这并没有捕捉到superview / layer更改的情况(例如,UIScrollView通过更改滚动视图原点滚动)。我离开了挂钩父视图并在代码中遍布setNeedsDisplay。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

当前可见的rect是[CALayer visibleRect]。这是由滚动视图(图层)设置的,是您希望在滚动视图中绘制的基础。

您可能希望覆盖-needsDisplayOnBoundsChange以返回YES。这通常是您处理大部分内容的方式。

如果您希望像position这样的东西强制重绘(这是不寻常的,但可能),那么您可以覆盖+needsDisplayForKey:以返回YES以进行任何要强制重绘的关键更改。< / p>

如果您想确保只绘制需要绘制的内容,那么您应该在绘图代码中使用CGContextGetClipBoundingBox()检查裁剪框。