7

我有一个图像视图,在按钮单击时我也绘制了一些贝塞尔路径和一些文本层。在撤消时,我删除了最后绘制的路径和文本层。

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

4

2 回答 2

21

来不及回答...

但可能这可以帮助其他人。CALayers 没有自动调整大小的掩码您可以通过一些技巧来管理它。

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

如果您创建了 UIView 的子类,这将起作用。如果不是这样,您可以在任何地方设置 CALayer 框架的边界,前提是您参考了您的图层。

于 2013-05-14T12:41:48.233 回答
4

至少有3个选项:

  1. 使用委托CALayer
  2. override layoutSublayers,并通过调用它setNeedsLayout()
  3. 使用分机和通话视图fitLayers

下面的示例,选项 3

斯威夫特 5, 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()
}
于 2018-08-15T17:45:57.570 回答