У меня есть объект на SCNScene, и я хочу, чтобы пользователь увеличивал / уменьшал масштаб на определенных c частях с помощью двойного касания, и я подумал о двух вариантах:
- Переместить камеру в эта часть, аналогичная этому вопросу, Scenekit - увеличение / уменьшение выбранного узла сцены и он не уменьшился, когда я применил этот подход, или даже не увеличил точно.
- Добавьте узел камеры перед каждой частью, чтобы, когда пользователь нажимает на часть, он должен переместить камеру по умолчанию сцены к настроенной камере, которую я добавил, но я думал, что это повлияет на производительность из-за узлов, которые я продолжаю добавлять. Стоит ли мне попробовать?
Это код, который я пробовал для первого подхода.
@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
}
}