我正在尝试使用捏合手势识别器来上下缩放 UITextView,但它始终以 1.0 的比例开始。
我试图实现这些答案:
iOS Pinch Zoom Start from Previous Scale
UIPinchGestureRecognizer. Make zoom in location of fingers, not only center
Pinch gesture scale resetting to 1?
但我一定是做错了什么,因为它每次仍然重置为 1.0 的比例。这是我的代码:
@objc func pinchRecognized(recognizer: UIPinchGestureRecognizer) {
var lastScale:CGFloat = 1.0
if let view = recognizer.view as? UITextView {
if (recognizer.state == .began) {
lastScale = 1.0
}
let scale = 1.0 - (lastScale - recognizer.scale)
view.transform = CGAffineTransform(scaleX: scale, y: scale)
view.font = UIFont.systemFont(ofSize: 40 * scale)
lastScale = recognizer.scale
}
}
最佳答案
变量lastScale
将始终为1
,因为此方法一旦被使用就会从内存中删除,直到再次调用。因此,lastScale
将始终重置为 1。最重要的是,您有 recognizer.state == beginning
并设置 lastScale = 1
,这意味着每次调用新触摸时,lastscale = 1
。
您应该做的是创建一个全局变量,而不是局部变量,然后调整该比例。这将允许它不会每次都重置回 1。此外,永远不要重置 lastScale
,除非您按下某个重置功能。想一想 - 为什么要在设置 lastScale 后重置它?
关于ios - 如何从以前的比例开始捏缩放手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54228949/