2016-11-09 119 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

非常感谢您的帮助!它非常完美!谢了哥们! –