ビューのサイズを変更する際に問題が発生していますが、境界が変更されていないように見えます(ビューを狭めた後、UIViewの端を使用してピンチさらに)UIPinchGestureRecognizerが呼び出された後にUIViewの境界を変更する
@IBAction private func handlePinch(_ sender: UIPinchGestureRecognizer) {
if let view = sender.view {
view.transform = view.transform.scaledBy(x: sender.scale, y: sender.scale)
sender.scale = 1
}
}
私はサブビューに合わせてサイズを変更する拡張子を与えた可能性が高いstackoverflowの答えiphone uiview - resize frame to fit subviewsを見つけましたが、オブジェクトの動作中に観察可能な違いはありません。
@IBAction private func handlePinch(_ sender: UIPinchGestureRecognizer) {
if let view = sender.view {
view.transform = view.transform.scaledBy(x: sender.scale, y: sender.scale)
sender.scale = 1
}
self.resizeToFitSubviews()
}
extension UIView {
func resizeToFitSubviews() {
let subviewsRect = subviews.reduce(CGRect.zero) {
$0.union($1.frame)
}
let fix = subviewsRect.origin
subviews.forEach {
$0.frame.offsetBy(dx: -fix.x, dy: -fix.y)
}
frame.offsetBy(dx: fix.x, dy: fix.y)
frame.size = subviewsRect.size
}
どのように私はピンチ(と同じ問題で、最終的にhandleRotate機能)が正しく境界を調整するために動作させることができますか?