ios - 在 SCNScene 上双击放大并双击缩小
问题描述
我在 SCNScene 上有一个对象,我希望用户使用双击放大/缩小特定部分,我想到了两个选项:
- 让相机本身移动到那个部分,类似于那个问题,
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
}
}
解决方案
推荐阅读
- java - RESTful JAX-RS 通过多部分请求下载多个 pdf
- java - Java:将数组切割成第n个数字然后添加到数据库
- java - 使用 Spring Web 的 CorsWebFilter 拒绝服务器端请求
- php - Laravel 集合按日期分组和总和
- python - Python if a > b: b, a = a, b 含义
- windows - 是否可以让 webpack 的 watch 模式在 Windows 上工作?
- python - inspect.getsourcelines 新失败:TypeError:是一个内置类
- javascript - 如何减少此代码的运行时间?
- javascript - Google 表格 API 在尝试获取资源时给出 Uncaught (in promise) TypeError: NetworkError
- ios - 使用 URLSession 无法捕获“超时”错误