0

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

有没有更好的办法?

4

1 回答 1

2

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

您可能想要覆盖-needsDisplayOnBoundsChange返回YES。这通常是您处理您所描述的大部分内容的方式。

如果您想要诸如位置之类的东西来强制重绘(这很不寻常,但可能),那么您可以覆盖+needsDisplayForKey:以返回YES您想要强制重绘的任何关键更改。

如果你想确保你只画你需要画的东西,那么你应该CGContextGetClipBoundingBox()在你的绘图代码中检查你的剪贴框。

于 2013-02-13T23:26:35.763 回答