SceneKit按钮显示延迟

时间:2016-11-09 17:07:36

标签: ios swift uibutton scenekit

我正在尝试用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辆汽车相互碰撞时调用此功能。有人可以帮助我在屏幕上显示我的按钮没有这么大的延迟吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

来自documentation

  

在大多数情况下,只能从应用程序的主线程中使用UIKit类。对于从UIResponder派生的类或涉及以任何方式操纵应用程序的用户界面的类尤其如此。

你的函数是在主线程中调用的吗?在SceneKit的渲染队列中调用SCNSceneRendererDelegate委托方法。如果您在那里检测到冲突,则需要将函数调用分派给主队列:

DispatchQueue.main.async {
   createRespawnButton()
}