2017-01-27 12 views
1

Этот код, намереваясь представить пользователя с помощью «меню» UIViewController, вместо этого приветствует их черным экраном.Представление UIViewController из SKScene показывает черный экран

let currentViewController:UIViewController=UIApplication.shared.keyWindow!.rootViewController! 
let mymenu = menu() 
currentViewController.present(mymenu, animated: true, completion: nil) 

Я переход от SKScene.

+0

Отзывы (0) Ваш отзыв будет первым! Кто-нибудь? –

ответ

2

Представить SKScene из другого SKScene вы должны сделать, например:

let nextScene = MainScene(size: self.scene!.size) 
self.scene?.view?.presentScene(nextScene, transition: SKTransition.doorway(withDuration: 1)) 

Вам не нужно, чтобы получить ваш currentViewController, потому что вы всегда доступ к view из ваших scene


Как объясняется ниже, существуют различные методы для вызова функции, реализованной в вашем режиме viewController, можно создать делегат/протокол как показано в этом коде:

GameScene Пример:

import SpriteKit 
protocol GameViewControllerDelegate: class { 
    func callMethod(inputProperty:String) 
} 
class GameScene: SKScene { 
    weak var gameViewControllerDelegate:GameViewControllerDelegate? 
    override func didMove(to view: SKView) { 
     gameViewControllerDelegate?.callMethod(inputProperty: "call game view controller method") 
    } 
} 

GameViewController Пример:

class GameViewController: UIViewController, GameViewControllerDelegate { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     if let view = self.view as! SKView? { 
      // Load the SKScene from 'GameScene.sks' 
      if let scene = SKScene(fileNamed: "GameScene") { 
       let gameScene = scene as! GameScene 
       gameScene.gameViewControllerDelegate = self 
       gameScene.scaleMode = .aspectFill 
       view.presentScene(gameScene) 
      } 
      view.ignoresSiblingOrder = true 
      view.showsFPS = true 
      view.showsNodeCount = true 
     } 
    } 
    func callMethod(inputProperty:String) { 
     print("inputProperty is: ",inputProperty) 
    } 
} 

Выход:

enter image description here

+0

Но я перехожу к просмотру, а не к SKScene. –

+0

Вы должны отличать элементы 'UIKit' от элементов' Sprite-kit', особенно если вы работаете с игрой. У вас также нет представления, кроме «SKView», в котором содержится «SKScene», поэтому вы не можете «переходить» на вид –

+0

Простите, я не понимаю. Я хочу вызвать функцию в своем SKScene, которая представит плеер с помощью uiviewcontroller. –