我正在尝试用Swift创建一个3D游戏。当玩家死亡时,UIButton应显示在屏幕上。问题是按钮有一个非常大的延迟(类似于5秒),直到按钮显示。我使用了与SpriteKit游戏相同的代码。当按钮显示时,我试图在控制台中打印一条消息,这条消息没有延迟。
我的按钮:
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辆汽车相互碰撞时调用此功能。有人可以帮助我在屏幕上显示我的按钮没有这么大的延迟吗? 谢谢!
答案 0 :(得分:2)
在大多数情况下,只能从应用程序的主线程中使用UIKit类。对于从UIResponder派生的类或涉及以任何方式操纵应用程序的用户界面的类尤其如此。
你的函数是在主线程中调用的吗?在SceneKit的渲染队列中调用SCNSceneRendererDelegate
委托方法。如果您在那里检测到冲突,则需要将函数调用分派给主队列:
DispatchQueue.main.async {
createRespawnButton()
}