【发布时间】:2011-03-30 20:05:55
【问题描述】:
我在图层托管视图中有一些 CALayers。这些层中的每一个都有额外的层来容纳(1)一个关闭按钮,和(2)一个调整大小的手柄。这些额外的“控制”层作为子层添加到父层。
目前,当我缩放这些图层所在的工作空间时,所有内容都会缩放——包括这些控制图层。但是,我想阻止这些控制层缩放。
有没有一种方法可以覆盖将比例变换应用于所有子层的行为,而不必覆盖每个控制层的 drawInContext: 方法(大概是为了反转任何现有的比例变换——假设这是可能的)并且没有每次缩放都必须手动向每个控制层发送 setNeedsDisplay: 吗?
我发现这个帖子讨论了做类似的事情,但讨论的方向是 CATiledLayers,这不是我在这里寻找的。p>
Redrawing CALayer subclass when super layer is scaled
此外,这篇文章提出了一个相关的问题,但回答不适用于我的情况,因为我无法覆盖控件——它们必须是层层次结构的一部分。
How do I keep a CALayer, sublayer of a CATiledLayer, from changing it's scale after a zoom?
【问题讨论】:
-
我最终通过覆盖自定义 CALayers 的 layoutSublayers 方法解决了这个问题,获取层层次结构的累积缩放变换,并将逆变换应用于控制子层。
标签: objective-c cocoa zooming calayer scale