【发布时间】:2022-11-10 09:03:28
【问题描述】:
我正在尝试使用UIPanGestureRecognizer 用一根手指旋转和缩放UIView,其中UIImageView 内部为subView。旋转和缩放在常规情况下都可以正常工作,但是当视图倒置旋转时,它会以相反的方向工作而不是按比例放大,反之亦然,当在角点旋转时,它也会闪烁,不能正常工作。结果显示在这些 GIF 中:
这是我试图实现这一目标的方法:
@objc func ScaleGest(gesture: UIPanGestureRecognizer) {
guard let gestureSuperView = gesture.view?.superview else { return }
let center = frameScaleBut.center
let touchLocation = gesture.location(in: self.view)
if gesture.state == UIPanGestureRecognizer.State.began {
self.initialDistance = distance(center, touchLocation)
} else if gesture.state == UIPanGestureRecognizer.State.changed {
let dist = distance(center, touchLocation) - initialDistance
let smallScale: CGFloat = editingMode == .sticker ? 90 : 190
let nextScale: CGSize = CGSize(width: gestureSuperView.bounds.width + dist, height: gestureSuperView.bounds.height + dist)
if (nextScale.width >= (self.view.frame.width * 0.8)) || nextScale.width <= smallScale {
return
}
gestureSuperView.bounds.size = CGSize(width: gestureSuperView.bounds.width + dist, height: gestureSuperView.bounds.height + dist)
}
}
我从这个答案https://stackoverflow.com/a/1906659/20306199中得到了这个方法的距离
func distance(_ a: CGPoint, _ b: CGPoint) -> CGFloat {
let xDist = a.x - b.x
let yDist = a.y - b.y
return CGFloat(sqrt(xDist * xDist + yDist * yDist))
}
当对象没有旋转时,这可以正常工作,但是我认为当对象倒置旋转时,它仍然可以使用相同的坐标,但实际上它应该以相反的方式使用这些值,任何人都可以帮助我理解或实现这一点,谢谢。
【问题讨论】:
-
你能分享一下你是如何布局视图的吗?
标签: ios swift uiview uikit uipangesturerecognizer