2015-03-24 118 views
0

嗨我已经看到很多关于此主题的问题,但似乎没有一个能解决我的情况。我想在用户赢/死时在SKScene上展示一个UIView控制器。我创建了一个PresentWinLoseViewController:UIViewController子类并将其连接到故事板中。我创建了一个从GameViewController到故事板中的PresentWinLoseViewController的segue,再加上从PresentWinLoseViewController返回到GameViewController的两个退出段。如何在spritekit场景上呈现uiviewcontroller

这是我如何打电话给这些。在我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'' 

我在做什么错?

回答

1

对于初学者来说,GameViewController应该已经被初始化,就没有必要let gameVC = GameViewController()

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

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

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

+0

我不断收到这样的: ***终止应用程序由于未捕获的异常“NSInvalidArgumentException”,理由是:“接收器()没有标识符'testSegue'' ,并且我已经在storyboard中命名了segue。我删除它,并readded /重命名它......仍然不断收到此错误。 – Jeremy 2015-03-26 16:48:31

0

我会做到这一点通过将要素,你想你的场景到这儿来顶在同一个视图控制器只在与你的场景相比更高的水平上。使用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 
} 

通过调用这些函数它只是显示或隐藏该页面的元素。我目前正在制作页面之间的转换动画。做这件事也给你增添透明度,让您的应用程序好看的选项;)

+0

这将是一个很好的解决方案,但后来我遇到了无法在SKScene中呈现iAds的问题! – Jeremy 2015-03-25 02:48:04