Дважды нажмите для увеличения и дважды нажмите для уменьшения в SCNScene - PullRequest
0 голосов
/ 06 августа 2020

У меня есть объект на SCNScene, и я хочу, чтобы пользователь увеличивал / уменьшал масштаб на определенных c частях с помощью двойного касания, и я подумал о двух вариантах:

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