使用 UIPinchGestureRecognizer 进行捏合缩小

问题描述 投票:0回答:1

奇怪的是,我的应用程序的

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
    }
        
        
}

谢谢

ios swift uikit uigesturerecognizer
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
  }
        
}
© www.soinside.com 2019 - 2024. All rights reserved.