Pav*_*n K 2 xcode ios scenekit
我正在尝试使用Pinch手势实时缩放和SCNNode:
这是我当前的代码
let pinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(from:)))
sceneView.addGestureRecognizer(pinchGestureRecognizer)
@objc
func handlePinch(from recognizer: UIPinchGestureRecognizer){
var pinchScale = recognizer.scale
pinchScale = round(pinchScale * 1000) / 1000.0
sceneView.scene.rootNode.enumerateChildNodes { (node, stop) -> Void in
if(node.name == "Box01"){
node.scale = SCNVector3(x: pinchScale, y: pinchScale, z: pinchScale)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,节点不能按比例缩放吗?有人可以指出我的错误吗?
像这样加载SCNNode并在其上应用动画,
sceneView.scene.rootNode.addChildNode(node)
loadAnimation(animation: .Attack, sceneName: "art.scnassets/attack", animationIdentifier: "attackID");
Run Code Online (Sandbox Code Playgroud)
小智 5
迅速运作
@objc func handlePinch(gesture: UIPinchGestureRecognizer){
if(scnnodeSelected){
if (gesture.state == .changed) {
let pinchScaleX = Float(gesture.scale) * tappedObjectNode.scale.x
let pinchScaleY = Float(gesture.scale) * tappedObjectNode.scale.y
let pinchScaleZ = Float(gesture.scale) * tappedObjectNode.scale.z
tappedObjectNode.scale = SCNVector3(pinchScaleX, pinchScaleY, pinchScaleZ)
gesture.scale=1
}
}
}
Run Code Online (Sandbox Code Playgroud)
func addPinchGestureToSceneView(){
let pinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(ViewController.handlePitch(withGestureRecognizer:)))
sceneView.addGestureRecognizer(pinchGestureRecognizer)
}
@objc func handlePitch(withGestureRecognizer recognizer: UIPinchGestureRecognizer) {
let tapRecognizer = recognizer.location(in: sceneView)
let hitTestResults = sceneView.hitTest(tapRecognizer)
guard let node = hitTestResults.first?.node else {
return
}
if (recognizer.state == .changed) {
let pinchScaleX = Float(recognizer.scale) * node.scale.x
let pinchScaleY = Float(recognizer.scale) * node.scale.y
let pinchScaleZ = Float(recognizer.scale) * node.scale.z
node.scale = SCNVector3(x: Float(pinchScaleX), y: Float(pinchScaleY), z: Float(pinchScaleZ))
recognizer.scale=1
}
}
Run Code Online (Sandbox Code Playgroud)
我用它来处理比例:
@objc
func handlePinch(from recognizer: UIPinchGestureRecognizer){
var pinchScale = round(recognizer.scale * 1000)/1000000
let node_arm = sceneView.scene.rootNode.childNode(withName: "army", recursively: true)
node_arm?.runAction(.customAction(duration: 0, action: { node, progress in
node.physicsBody = nil
node.scale = SCNVector3(x: Float(pinchScale), y: Float(pinchScale), z: Float(pinchScale))
}))
}
Run Code Online (Sandbox Code Playgroud)