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. オーバーライド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 に答える