swift 如何在iOS上的整个视图上阻止2个手指手势

mnemlml8  于 11个月前  发布在  Swift
关注(0)|答案(2)|浏览(139)

我目前使用的是SceneKit的默认摄像头,我想继续使用单击和单击手势,但我想阻止默认的2指缩放,平移和旋转。
有没有一种方法可以捕获在视图上执行的所有2个触摸手势(我猜是SceneView的父视图)并取消它们,而不禁用1个触摸手势?
defaultCameraController的文档是缺乏的,它看起来像你可以控制滚动等,但不能防止它发生。

private func createCamera() {
        scnView.allowsCameraControl = true

        cameraNode = SCNNode()
        cameraNode.camera = SCNCamera()
        if #available(iOS 11.0, *) {
            scnView.defaultCameraController.maximumVerticalAngle = 30
            scnView.defaultCameraController.minimumVerticalAngle = -30
        }
        cameraNode.position = SCNVector3(x: 0, y: 0, z: 5)
        myScene.rootNode.addChildNode(cameraNode)
    }

字符串

lstz6jyr

lstz6jyr1#

此外-一旦你建立自己的相机-你可以测试触摸的数量-不包括所有的代码,但类似的东西:

func dragBegins(vRecognizer: UIPanGestureRecognizer)
    {
        if(data.gameState == .run)
        {
            if(vRecognizer.numberOfTouches == 2) { dragMode = .strafe }
        }
    }

字符串
您可以使用识别器状态(如. begined、.changed、.ended)来检查流并对其进行控制。

ffdz8vbo

ffdz8vbo2#

您可以通过遍历SNView上的特定手势并将isEnabled = false设置为您不希望启用的手势来禁用它们。
在这个例子中,我在初始化SNView时禁用了UIRotationGestureRecogizer(2个手指旋转)

public lazy var sceneView: SCNView = {
  let sv = SCNView()
  sv.allowsCameraControl = true
        
  sv.gestureRecognizers?.forEach({ gesture in
    if let gesture = gesture as? UIRotationGestureRecognizer {
      gesture.isEnabled = false
    }
  })

  sv.scene = self.scene
  return sv
 }()

字符串

相关问题