2016-11-09 14 views
0

私はSwiftで3Dゲームを作成しようとしています。プレーヤーが死亡すると、UIButtonが画面に表示されます。問題は、ボタンが表示されるまでボタンに非常に大きな遅延(5秒のようなもの)があることです。私はSpriteKitゲームに使用するのと同じコードを使用しました。ボタンが表示され、このメッセージが遅れなく表示されたら、コンソールにメッセージを印刷しようとしました。SceneKit Button show delay

マイボタン:2台が衝突したときに

func createRespawnButton() { 
    restartButton = UIButton(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width/3, height: 50)) 
    restartButton.setTitle("Play Again!", for: UIControlState.normal) 
    restartButton.setTitleColor(UIColor.cyan, for: UIControlState.normal) 
    restartButton.center = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height/2) 
    restartButton.addTarget(self, action: #selector(self.restartGame), for: UIControlEvents.touchDown) 

    self.view.addSubview(restartButton) 
} 

この関数が呼び出されます。このような大きな遅れがなくても、誰かが私のボタンを画面上に見せてくれるのを助けてくれますか? ありがとう! documentationから

答えて

2

ほとんどの部分についてのみ、アプリケーションのメインスレッドからのUIKitのクラスを使用します。これは、UIResponderから派生したクラスや、アプリのユーザーインターフェイスを操作するクラスに特に当てはまります。

あなたの関数はメインスレッドで呼び出されていますか? SCNSceneRendererDelegate SceneKitのレンダリングキューで委譲メソッドが呼び出されます。その場所で衝突が検出された場合は、関数呼び出しをメインキューにディスパッチする必要があります。

DispatchQueue.main.async { 
    createRespawnButton() 
} 
+0

私を助けてくれてありがとう!それは完璧に働いた!ありがとう! –