【问题标题】:how to present a uiviewcontroller over a spritekit scene如何在 spritekit 场景上显示 uiviewcontroller
【发布时间】:2015-03-24 21:22:38
【问题描述】:

您好,我已经看到很多关于这个主题的问题,但似乎没有一个可以解决我的问题。当用户获胜/死亡时,我想在 SKScene 上展示一个 UIView 控制器。我创建了一个 PresentWinLoseViewController : UIViewController 子类并将其连接到故事板中。我在情节提要中创建了一个从 GameViewController 到 PresentWinLoseViewController 的转场,以及从 PresentWinLoseViewController 回到 GameViewController 的两个退出转场。

我是这样称呼这些的。当我赢/输时在我的 SKScene 中

func win() {
     let gameVC = GameViewController()
    gameVC.performSegueWithIdentifier("tryAgain", sender: self)
}

我退出 PresentWinLoseViewController

   @IBAction func tryAgainButtonPressed(segue:UIStoryboardSegue) {

    self.performSegueWithIdentifier("unwindTryAgain", sender: self)

}

但我什至不能走那么远,因为第一个 segue 从来没有工作过。我不断得到

Receiver (<SpriteLevelBuilder.GameViewController: 0x7ff2b5e49210>) has no segue with identifier 'tryAgain''

我做错了什么?

【问题讨论】:

    标签: ios iphone swift uiviewcontroller sprite-kit


    【解决方案1】:

    对于初学者,GameViewController 应该已经初始化了,不需要let gameVC = GameViewController()

    这是因为您的 SKScene 实际上是由您的 GameViewController 呈现的。去看看你的 GameViewController,你应该在 viewDidLoad() 中看到 SKScene 的初始化过程。

    由于 GameViewController 已经初始化,您只需从您的 SKScene 中直接调用 GameViewController 上的 performSegueWithIdentifier。

    我刚刚做了一个快速搜索,这个答案似乎适用于你的情况:How to call method from ViewController in GameScene

    【讨论】:

    • 我不断收到此消息:*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“接收者(<0x7fa480ce3c40>
    【解决方案2】:

    我会通过将您希望出现在场景顶部的元素放置在同一个视图控制器中,就在您的场景之上。使用 UIImage 视图是为新元素制作背景的好方法。然后只需创建一个用于显示元素的函数和一个用于隐藏它们的函数。对于所有 UI 元素,.hidden = true 将是隐藏元素的方式,.hidden = false 将是显示元素的方式。这是我的一个应用程序中的一些代码示例。

    //this is the function that hides the settings menu
    func hideSettingsMenu() {
        settingsCoverImage.hidden = true
        settingsTitle.hidden = true
        watchButton.hidden = true
        fitBitButton.hidden = true
        backButton.hidden = true
        classesButton.hidden = true
        settingsTopBackground.hidden = true
    }
    
    //this is the function that shows the settings menu
    func showSettingsMenu() {
        settingsCoverImage.hidden = false
        settingsTitle.hidden = false
        watchButton.hidden = false
        fitBitButton.hidden = false
        backButton.hidden = false
        classesButton.hidden = false
        settingsTopBackground.hidden = false
    }
    

    通过调用这些函数它只是显示或隐藏该页面的元素。我目前正在为页面之间的过渡制作动画。这样做还可以让您选择添加透明度,让您的应用看起来更漂亮;)

    【讨论】:

    • 这将是一个很好的解决方案,但是我遇到了无法在 SKScene 中呈现 iAd 的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多