我有一个 CALayer,我只为可见区域提供内容(有点类似于 CATiledLayer)。问题是当 CALayer 的可见区域发生变化以便调用 displayLayer 时,似乎没有办法接收通知。我目前子类化并挂钩 setPosition、setBounds 和 setTransform,但这并没有捕捉到超级视图/图层更改的情况(例如,UIScrollView 通过更改滚动视图原点进行滚动)。我留下了挂钩父视图并在整个代码中洒上 setNeedsDisplay 。
有没有更好的办法?
我有一个 CALayer,我只为可见区域提供内容(有点类似于 CATiledLayer)。问题是当 CALayer 的可见区域发生变化以便调用 displayLayer 时,似乎没有办法接收通知。我目前子类化并挂钩 setPosition、setBounds 和 setTransform,但这并没有捕捉到超级视图/图层更改的情况(例如,UIScrollView 通过更改滚动视图原点进行滚动)。我留下了挂钩父视图并在整个代码中洒上 setNeedsDisplay 。
有没有更好的办法?
当前可见的矩形是[CALayer visibleRect]
. 这是由滚动视图(层)设置的,并且是您希望在滚动视图中绘制的基础。
您可能想要覆盖-needsDisplayOnBoundsChange
返回YES
。这通常是您处理您所描述的大部分内容的方式。
如果您想要诸如位置之类的东西来强制重绘(这很不寻常,但可能),那么您可以覆盖+needsDisplayForKey:
以返回YES
您想要强制重绘的任何关键更改。
如果你想确保你只画你需要画的东西,那么你应该CGContextGetClipBoundingBox()
在你的绘图代码中检查你的剪贴框。