如何自动调整子图层

时间:2013-01-30 13:33:56

标签: iphone ios objective-c drawing uibezierpath

我有一个imageview,按下按钮我也绘制了一些bezier路径和一些文本层。在撤消时,我删除了最后绘制的路径和文本图层。

现在我想调整我的图像视图大小以设置在视图的半部分并在下半部分视图中重复,并希望同时调整所有图层的大小,并且还希望在此之后继续绘制。

2 个答案:

答案 0 :(得分:17)

回答太晚了......

但可能这可以帮助别人。 CALayers没有自动调整大小的掩码 你可以用一些技巧来管理它..

- (void)layoutSubviews {
  // resize your layers based on the view's new frame
  layer.frame = self.bounds;
}

如果您已经创建了UIView的子类,这将有效。如果不是这样,只要引用了图层,就可以在任何地方设置CALayer框架的边界。

答案 1 :(得分:0)

至少有3个选项:

  1. 使用CALayer的委托
  2. 覆盖layoutSublayers,然后由setNeedsLayout()调用
  3. 使用附加信息和通话视图的fitLayers

下面的示例,选项3

雨燕4

代码

extension UIView {
    func fitLayers() {
        layer.fit(rect: bounds)
    }
}

extension CALayer {
    func fit(rect: CGRect) {
        frame = rect

        sublayers?.forEach { $0.fit(rect: rect) }
    }
}

示例

// inside UIViewController 
override func viewWillLayoutSubviews() {    
    super.viewWillLayoutSubviews()

    view.fitLayers()
}

// or
// inside UIView
override func layoutSubviews() {    
    super.layoutSubviews()

    fitLayers()
}