如何在 GKGameCenterViewController 关闭时显示特定的 UIViewController?

问题描述

我在继承自以下协议的 SKScene 中展示了一个 GKGameCenterViewController

protocol GameCenter {}
extension GameCenter where Self: SKScene {

    func goToleaderboard() {
        let vc = GKGameCenterViewController()
        vc.gameCenterDelegate = GameViewController()
        vc.viewState = .leaderboards
        vc.leaderboardIdentifier = "leaderboard"
        view?.window?.rootViewController?.present(vc,animated: true,completion: nil)
    }
    
}

虽然 GKGameCenterViewController 显示完美,但当我尝试通过单击右上角的 X 关闭时,没有任何反应。我认为这是因为对我的原始 GameViewController 的引用已被解除分配。我怎样才能让这种解雇生效?

解决方法

根据Apple's Documentation

您的委托应该关闭 Game Center 视图控制器。如果您的游戏暂停了任何游戏或其他活动,它可以通过此方法重新启动这些服务。

这意味着您需要在委托中实现 gameCenterViewControllerDidFinish 方法并自行关闭 gameCenterViewController

您的 GameViewController()

中应该有类似的内容
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
    gameCenterViewController.dismiss(animated: true,completion: nil)
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...