2010-08-17 53 views
2

我在图层托管视图中有一些CALayer。这些图层中的每一层都有附加的图层来保存(1)关闭按钮,以及(2)调整大小手柄。这些附加的“控制”图层作为子图层添加到父图层。防止CALayer子图层缩小

当前,当我缩放这些图层所在的工作空间时,所有内容都会缩放 - 包括这些控制图层。但是,我想阻止这些控制层的扩展。

是否有一种方法可以覆盖应用于所有子图层的缩放变换的行为,而无需为每个控制图层重写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?

+0

我最终解决了这个问题,方法是重写自定义CALayers的layoutSublayers方法,获取图层层次结构的累积缩放比例变换,并将逆变换应用于控制子图层。 – Dalmazio 2010-09-28 05:38:35

回答

3

我最终通过重写我的自定义CALayers的layoutSublayers方法,获得了层层次的累积尺度变换,并应用逆变换,以控制子层解决这个问题。

+0

您是否在视图控制器的'scrollViewDidZoom:'委托方法中为受影响的视图调用了'[layer setNeedsLayout]'? – Benjohn 2014-11-21 18:21:54

+1

是的,没有。该应用程序使用AppKit而不是UIKit。因为这样的UIScrollView和UIScrollViewDelegate不可用。但是如果你使用的是UIKit,你建议的方式是实现它的一种方法。 在这个应用程序中,一个单独的图层托管的视图拥有一个内容图层,该图层依次保存许多子图层。缩放/缩放变换直接应用于内容层,然后将'setNeedsLayout'发送到内容层中的所有项目层,以便子层控件可以设置其逆变换以保持固定大小。 – Dalmazio 2014-11-23 21:40:59