2016-11-09 118 views
0

我試圖創建一個斯威夫特3D遊戲。當玩家死亡時,UIButton應該顯示在屏幕上。問題是按鈕有一個非常大的延遲(如5秒),直到按鈕顯示。我已經使用了與SpriteKit遊戲相同的代碼。當按鈕應該顯示時,我試圖在控制檯上打印一條消息,並且這條消息沒有延遲。SceneKit按鈕顯示延遲

我的按鈕:

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) 
} 

時,2輛汽車互相碰撞時調用此函數。有人可以幫我在屏幕上顯示我的按鈕嗎? 謝謝!

回答

2

documentation

在大多數情況下,使用UIKit類只能從應用程序的主線程。對於從UIResponder派生的類或者以任何方式涉及操縱應用程序用戶界面的類尤其如此。

您的函數是否在主線程中調用?在SceneKit的渲染隊列中調用SCNSceneRendererDelegate委託方法。如果這是您檢測到衝突的地方,您將需要將您的函數調用發送到主隊列:

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

非常感謝您的幫助!它非常完美!謝了哥們! –