奇怪的是,我的应用程序的
UIPinchGestureRecognizer
使得将我的手指移动到一起可以放大 in,而将手指分开则可以放大 out——这与 iOS 正常工作方式的相反。
我认为这不相关,但是:我在
SpriteKit
应用程序中使用它。
我做错了什么?如何使
UIPinchGestureRecognizer
启用正常的 iOS 捏拉放大 和 捏捏缩小 行为?
let pinch = UIPinchGestureRecognizer(target: self, action: #selector(GameScene.pinchZoom))
self.thisView?.addGestureRecognizer(pinch)
var normalCameraScale: CGFloat?
var accumulatedCameraScale: CGFloat = 1.0
@objc func pinchZoom(_ gesture: UIPinchGestureRecognizer) {
if self.normalCameraScale == nil {
self.normalCameraScale = self.camera?.xScale ?? 1.0
self.accumulatedCameraScale = self.normalCameraScale!
}
let maxScale: CGFloat = 10.0
let newScale = gesture.scale * self.accumulatedCameraScale
if newScale <= maxScale && newScale >= self.normalCameraScale! {
self.camera?.setScale(newScale)
}
if gesture.state == .ended {
self.accumulatedCameraScale = self.camera?.xScale ?? 1.0
}
}
谢谢
正如这里所述,这个公式解决了这个问题:
self.accumulatedCameraScale * 1 / gesture.scale
功能齐全:
var normalCameraScale: CGFloat?
var accumulatedCameraScale: CGFloat = 1.0
@objc func pinchZoom(_ gesture: UIPinchGestureRecognizer) {
if self.normalCameraScale == nil {
self.normalCameraScale = self.camera?.xScale ?? 1.0
self.accumulatedCameraScale = self.normalCameraScale!
}
let maxScale: CGFloat = 10.0
//This formula makes it work correctly:
let newScale = self.accumulatedCameraScale * 1 / gesture.scale
if newScale <= maxScale && newScale >= self.normalCameraScale! {
self.camera?.setScale(newScale)
}
if gesture.state == .ended {
self.accumulatedCameraScale = self.camera?.xScale ?? 1.0
}
}