イメージビューがあり、ボタンをクリックすると、ベジェパスとテキストレイヤーも描画されます。元に戻すときに、最後に描画したパスとテキスト レイヤーを削除しました。
ここで、画像ビューのサイズを変更して、ビューの上半分に設定し、下半分に複製し、すべてのレイヤーを同時にサイズ変更し、その後も描画を続けたいと考えています。
イメージビューがあり、ボタンをクリックすると、ベジェパスとテキストレイヤーも描画されます。元に戻すときに、最後に描画したパスとテキスト レイヤーを削除しました。
ここで、画像ビューのサイズを変更して、ビューの上半分に設定し、下半分に複製し、すべてのレイヤーを同時にサイズ変更し、その後も描画を続けたいと考えています。
回答が遅すぎます...
しかし、これは他の人を助けることができるかもしれません。CALayers の自動サイズ変更マスクはありません。いくつかのトリックでそれを管理できます。
- (void)layoutSubviews {
// resize your layers based on the view's new frame
layer.frame = self.bounds;
}
これは、UIView のサブクラスを作成した場合に機能します。そうでない場合は、レイヤーへの参照があれば、どこでも CALayer のフレームに境界を設定できます。
少なくとも 3 つのオプションがあります。
CALayer
layoutSublayers
し、それを呼び出しますsetNeedsLayout()
fitLayers
以下の例、オプション 3 :
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()
}