SceneKit按钮显示延迟
问题描述:
我试图创建一个斯威夫特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辆汽车互相碰撞时调用此函数。有人可以帮我在屏幕上显示我的按钮吗? 谢谢!
答
在大多数情况下,使用UIKit类只能从应用程序的主线程。对于从UIResponder派生的类或者以任何方式涉及操纵应用程序用户界面的类尤其如此。
您的函数是否在主线程中调用?在SceneKit的渲染队列中调用SCNSceneRendererDelegate
委托方法。如果这是您检测到冲突的地方,您将需要将您的函数调用发送到主队列:
DispatchQueue.main.async {
createRespawnButton()
}
非常感谢您的帮助!它非常完美!谢了哥们! –