ここでは、シンプルなシーンキットのデフォルトシーンを船で表示しています。船、リリース、船のスピンをタップします。あなたは船をタップするとアクションが始まるようにプログラムをどのように修正しますか?タップを離したり保持したりする心配はありません。タップを離すのではなく、タップするオブジェクトでアクションを実行するにはどうすればよいですか?
class GameViewController: UIViewController {
override func viewDidLoad() { super.viewDidLoad()
let scene = SCNScene(named: "art.scnassets/ship.scn")!
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
scene.rootNode.addChildNode(cameraNode)
cameraNode.position = SCNVector3(x: 0, y: 0, z: 15)
let lightNode = SCNNode()
lightNode.light = SCNLight()
lightNode.light!.type = SCNLightTypeOmni
lightNode.position = SCNVector3(x: 0, y: 10, z: 10)
scene.rootNode.addChildNode(lightNode)
let ambientLightNode = SCNNode()
ambientLightNode.light = SCNLight()
ambientLightNode.light!.type = SCNLightTypeAmbient
ambientLightNode.light!.color = UIColor.darkGrayColor()
scene.rootNode.addChildNode(ambientLightNode)
let scnView = self.view as! SCNView
scnView.scene = scene
scnView.allowsCameraControl = true
scnView.showsStatistics = true
scnView.backgroundColor = UIColor.blackColor()
let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
scnView.addGestureRecognizer(tapGesture)
}
func handleTap(gestureRecognize: UIGestureRecognizer) {
let scnView = self.view as! SCNView
// the ship
let ship = scnView.scene!.rootNode.childNodeWithName("ship", recursively: true)!
// the action
let rotateY = SCNAction.repeatActionForever(SCNAction.rotateByX(0, y: 2, z: 0, duration: 1))
let point = gestureRecognize.locationInView(scnView)
let hitResults = scnView.hitTest(point, options: nil)
if hitResults.count > 0 {
let result: AnyObject! = hitResults[0]
// the call
if result.node!.name!.hasPrefix("ship") {
ship.runAction(rotateY)
}
}
}
override func shouldAutorotate() -> Bool { return true }
override func prefersStatusBarHidden() -> Bool { return true }
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone { return .AllButUpsideDown }
else { return .All }
}
override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }
}
でカスタムUIViewのを作成して、メソッドを使用できます。これを行うにはあなたが求めているものを私に明確ではありません。このコードを実行した結果は何ですか?また、実行するコードとはどのように違うのですか? –
このコードは現在、タップがオブジェクト(船)から解放されたときにアクションを呼び出します。タップが開始されたときにアクションを呼び出す方法を知りたい。 – swl
あなたは[UITapGestureRecognizer - タッチダウン、タッチアップしないようにする]を参照することができます(http://stackoverflow.com/questions/15628133/uitapgesturerecognizer-make-it-work-on-touch-down-not-touch-up )あなたのジェスチャーをカスタマイズして使用することができます。 – chancyWu