这个代码块我遇到了麻烦。因为'presentViewController'而给我错误
func authenticateLocalPlayer(){
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if (viewController != nil) {
self.presentViewController(viewController!, animated: true, completion: nil)
}
else {
print((GKLocalPlayer.localPlayer().authenticated))
}
}
}
我知道这是因为SKScene已经有了一个UIViewController,但我不知道如何代表它。
答案 0 :(得分:0)
您无法在presentViewController
内拨打SKScene
,需要在UIViewController
上拨打电话。
因此,您希望找到包含Sprite Kit内容的父视图控制器,并在那里调用该函数。
答案 1 :(得分:0)
在场景中有简单的方法来处理它。试一试,告诉我们。我并不完全不同意上面的答案,但他们应该更好地指导你并给出正确的答案。是的你必须在UIViewController上调用presentViewController。由于你的SKScene使用的是View的子类而不是UIView的SKView,所以从self调用presentViewController意味着你要求SKView对象呈现一个SKView不能的UIViewController。但这是一个简单的解决方案,因为SKView是UIView本身的子类,因此请求SKView的根视图控制器为您执行此操作。 你的电话会是这样的(我在目标C中写它,因为我不用swift编码,但两种语言都是如此)
[self.view.window.rootViewController presentViewController:viewController animated:YES completion:nil];
正如您所看到的那样,您不必询问'self',而是要问'self.view.window.rootViewController'。你可以在你的场景中做到这一点。你去吧。