需要帮助从控制器SWIFT实例化控制器和故事板场景?

时间:2015-02-16 00:14:27

标签: ios swift uistoryboard

我有一个控制器使用Singleton在单个故事板场景中更改SKScenes。

class GameViewController: UIViewController, GKGameCenterControllerDelegate, GADBannerViewDelegate, GADInterstitialDelegate, ADBannerViewDelegate, FBLoginViewDelegate, CLLocationManagerDelegate, MapViewControllerDelegate {
    var sharedInstance = Singleton.sharedInstance

    var skView:SKView!
    var scene:GameScene! = GameScene.unarchiveFromFile("GameScene") as? GameScene

    var searchedTypes = ["bakery", "bar", "cafe", "grocery_or_supermarket", "restaurant"]
    let locationManager = CLLocationManager()

    var adHelper: AdHelper = AdHelper()

    override func viewDidLoad() {
        super.viewDidLoad()

        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()

        // Configure the view.
        skView = self.view as SKView
        skView.showsFPS = false
        skView.showsNodeCount = false

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        skView.presentScene(scene, transition: SKTransition.crossFadeWithDuration(kSceneTransitionSpeed))
}

// LOAD MAP SCENE

    func showMap(){
      let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("MapController") as UIViewController

      self.presentViewController(viewController, animated: false, completion: nil)
    }

}

在我的游戏场景中,我有一个按钮,我正在呼叫此控制器以更改到故事板中的其他场景,因为我没有布局按钮来使用IBAction

import SpriteKit

class GameScene: SKScene {
    var sharedInstance = Singleton.sharedInstance

    let playButton = Button(imageNamed:"playButton");
    let highscoresButton = Button(imageNamed:"highscoresButton");
    let creditsButton = Button(imageNamed:"creditsButton");
    let moreGamesButton = Button(imageNamed: "moreGamesButton")

    override func didMoveToView(view: SKView) {
        // background
        let background = SKSpriteNode(imageNamed: "background")
        background.position = CGPointMake(self.size.width/2, self.size.height/2)
        self.addChild(background)


        // main image
        let main = SKSpriteNode(imageNamed: "main")
        main.position = CGPointMake(self.size.width/2, self.size.height/2)
        self.addChild(main)

        // buttons
        moreGamesButton.position = CGPointMake(self.size.width/2 + playButton.size.width, main.position.y + main.size.height/2 + playButton.size.height)
        self.sharedInstance.addChildFadeIn(moreGamesButton, target: self)
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        for touch: AnyObject in touches {
            let location = touch.locationInNode(self);

            if self.nodeAtPoint(location) == self.moreGamesButton {

                var gameController: GameViewController=GameViewController()
                gameController.showMap()

            }

        }
    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
}

当我点击这个时,我没有得到一个定义的错误只是一个休息时间我得到的线程" Swift动态转换失败"。

我可以不在场景中调用控制器,或者在实例化其他控制器时是否有问题?

0 个答案:

没有答案