2016-11-29 7 views
1

Я хочу перейти от SKScene к UIViewController. Мой код выглядит следующим образом. Однако, когда щелкнут метод showViewController(), представление не будет перемещаться. Как я могу это решить?Переход от SKScene к UIViewController

Я использую SWIFT3 и XCODE 8.1

class GameScene: SKScene, SKPhysicsContactDelegate { 
    func showViewController() { 
     print("button clicked") 

     self.view!.window!.rootViewController!.performSegue(withIdentifier: "DashboardVIewControllerSegue", sender: self) 

    } 

} 

ответ

0

Что я сделал, чтобы добиться этого, не проблема памяти.

сначала создайте некоторый протокол (делегат) в корневом представленииController. Этот viewcontroller Содержит представление как SKView, где мы загружаем skscene.

так что всякий раз, когда вы хотите открыть новый viewcontroller из skscene, просто вызовите протокол.

здесь некоторый код В mainViewcontroller:

protocol GameProtocol { 
    func displayViewController() 
} 

.

extension MainViewController: GameProtocol { 

    internal func displayViewController() { 


     let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 

     let popoverVC = storyboard.instantiateViewController(withIdentifier: "SettingViewController") as! SettingViewController 
//  popoverVC.modalPresentationStyle = .fullScreen 
//  popoverVC.modalPresentationStyle = .popover 
     popoverVC.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) 

     popoverVC.view.backgroundColor = UIColor.popBackgroundColor 
     popoverVC.modalPresentationStyle = .popover 
     popoverVC.popoverPresentationController!.delegate = self 
     popoverVC.popoverPresentationController!.sourceView = self.view 
     popoverVC.popoverPresentationController!.sourceRect = CGRect(x: 0.5, y: 0.5, width: 0, height: 0) 

     popoverVC.preferredContentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height) 

     self.present(popoverVC,animated: false,completion: nil) 
    } 
} 

У меня есть этот код в maincontroller для всплывающего оповещения при необходимости. в пределах игры.

и в игровой сцене

func showViewController() { 
     let viewe = self.view as! GameSceneView 
     viewe.myDelegate?. displayViewController() 
    } 

Надеется, что вы получите это.