objective-c - 防止 CALayer 子层缩放

标签 objective-c cocoa zooming calayer scale

我在图层托管 View 中有一些 CALayers。这些层中的每一层都有附加层来容纳 (1) 关闭按钮和 (2) 调整大小 handle 。这些附加的“控制”层作为子层添加到父层中。

目前,当我缩放这些图层所在的工作区时,所有内容都会缩放 - 包括这些控制图层。但是,我想防止这些控制层缩放。

有没有一种方法可以覆盖将缩放变换应用于所有子层的行为,而不必覆盖每个控制层的drawInContext:方法(大概反转任何现有的缩放变换 - 假设这是可能的)并且没有每次缩放时都必须手动向每个控制层发送 setNeedsDisplay: 吗?

我发现这个帖子讨论了类似的事情,但讨论朝着 CATiledLayers 的方向发展,这不是我在这里寻找的。

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 - 防止 CALayer 子层缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3500225/

相关文章:

ios - 如何以编程方式将 UIButton 添加到 IBOutletCollection

objective-c - NSNumberFormatter 干扰 NSString intValue

安卓捏缩放

iphone - 如何使用子路径使用 NSBundle 获取资源路径

ios - 仅当应用未处于事件状态时才在 openURL 函数后不调用方法

macos - cocoa 滚动图像菜单

objective-c - 需要急救人员解释

objective-c - 自动更新标签 Objective-C 无需点击按钮

android - Android 默认支持双指缩放

layout - Sencha Touch v2 缩放布局问题