Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中切换SKScene和UIViewController_Swift_Uiviewcontroller_Ios8_Sprite Kit - Fatal编程技术网

如何在Swift中切换SKScene和UIViewController

如何在Swift中切换SKScene和UIViewController,swift,uiviewcontroller,ios8,sprite-kit,Swift,Uiviewcontroller,Ios8,Sprite Kit,加载SKScene时如何切换到UIViewController,反之亦然?到目前为止,我已经能够实现NSNotificationCenter来告诉我的GameViewController切换,但我在运行什么代码来实际更改场景方面遇到了问题。这是我的GameViewController.swift文件: import UIKit import SpriteKit import StoreKit class GameViewController: UIViewController { ov

加载SKScene时如何切换到UIViewController,反之亦然?到目前为止,我已经能够实现NSNotificationCenter来告诉我的GameViewController切换,但我在运行什么代码来实际更改场景方面遇到了问题。这是我的GameViewController.swift文件:

import UIKit
import SpriteKit
import StoreKit

class GameViewController: UIViewController {
    override func viewDidLoad() {

     NSNotificationCenter.defaultCenter().addObserver(self, selector: "openArtboard:", name:"OpenArtboard", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "openHomeScreen:", name:"OpenHomeScreen", object: nil)

    //Load the initial home screen
    let scene = homeScreen(size: view.bounds.size)
    let skView = view as SKView
    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.ignoresSiblingOrder = false
    scene.scaleMode = .ResizeFill        
    skView.presentScene(homeScreen(size: skView.bounds.size))
}

    func openArtboard(NSNotificationCenter) {

    //Dont know what to put here

}

    func openHomeScreen(NSNotificationCenter) {
    //Dont know what to put here
}
}
非常感谢您的帮助。

请查看:

我没有时间来测试这些答案,但请尝试一下

请记住,UIViewController包含SKView,因此通过更改当前视图控制器,您也将删除当前SKView。 尝试使用segue转到另一个SKView

以及如何从viewcontroller加载场景?它已经存在于您的代码中:

let scene = homeScreen(size: view.bounds.size)
let skView = view as SKView
skView.showsFPS = true
skView.showsNodeCount = true
skView.ignoresSiblingOrder = false
scene.scaleMode = .ResizeFill        
skView.presentScene(homeScreen(size: skView.bounds.size))

从场景切换到视图控制器是什么意思?场景显示在视图控制器中…在我的游戏中,我必须切换到常规的UIViewController以显示应用程序的另一部分,而该部分不是在SpriteKit中制作的。我使用了与下面hamecanecha所说的相同的代码,但当我尝试从UIViewController切换回SKScene时,会出现内存泄漏。我尝试使用相同的代码,但当您这样切换时会出现内存泄漏。我所演示的UIViewController将保留在内存中。我尝试调用self.artboardViewController.dismissViewControllerAnimated(true,completion:nil),但内存仍然很高。我向您展示的问题中的所有内容您都试过了吗?有很多答案,包括加载零场景等。你确定它们都有内存泄漏吗?仪器中真的有内存泄漏吗?是的……似乎我的SKScene被正确地关闭了,当我尝试切换回SKScene时,UIViewController留在内存中。:/每次我尝试这样做时都会有大约70mb的内存泄漏,这很奇怪,因为artboard ViewController现在只有一个按钮。堆栈顶部应该至少有一个UIViewController占用内存,但你告诉我,每次你呈现一个场景时,你都会丢失另一个70 mb的内存?是的,确实如此:(我想知道是不是因为每次我调用openHomeScreen函数时都会创建一个新的skview?