首页 > 解决方案 > 在 SCNScene 上双击放大并双击缩小

问题描述

我在 SCNScene 上有一个对象,我希望用户使用双击放大/缩小特定部分,我想到了两个选项:

  1. 让相机本身移动到那个部分,类似于那个问题, scenekit - 放大/缩小到场景的选定节点
    并且当我采用这种方法甚至准确放大时它没有缩小。
  2. 在每个部分前面添加摄像头节点,因此当用户点击某个部分时,它应该将场景的默认摄像头重新定位到我添加的配置摄像头,但我认为这会影响性能,因为我不断添加节点。我应该试试这个吗?

这是我尝试第一种方法的代码。

  @objc
    internal func handleTapGesture(_ gestureRecognizer: UIGestureRecognizer) {
        let hitPoint = gestureRecognizer.location(in: sceneViewVehicle)
        let hitResults = sceneViewVehicle.hitTest(hitPoint, options: nil)
    
        if hitResults.count > 0 {
            let result = hitResults.first!
            let scale = CGFloat(result.node.simdScale.y)

              switch gestureRecognizer.state {
                case .changed: fallthrough
                case .ended:
                           cameraNode.camera?.multiplyFOV(by: scale)
              default: break
                        }
}

添加手势

 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture(_:)))
       tapGesture.numberOfTapsRequired = 2
       sceneViewVehicle.addGestureRecognizer(tapGesture)

相机变焦

extension SCNCamera {
    public func setFOV(_ value: CGFloat) {
            fieldOfView = value
    }
    
    public func multiplyFOV(by multiplier: CGFloat) {
            fieldOfView *= multiplier
    }
}

标签: iosswiftscenekit

解决方案


推荐阅读