2016-07-11 17 views
0

Zum Beispiel auf UIViewController, wenn ich:Übergang von SKScene

class SpriteKitScene: SKScene { 
... 
} 

Und da möchte ich ein Bild haben, dass, wenn angezapft (gedrückt, angeklickt wird, berührt was auch immer) lädt eine weitere Datei mit:

class UiViewcontrollerScene: UIViewcontroller { 
... 
} 

Ich weiß, wie man von SKScene zu SKScene übergeht, aber ich muss von SKScene zu UIViewcontroller übergehen.

+0

Sie müssen den RootViewController greifen. Dann kannst du dich normal von dort präsentieren. Wie auch immer, wenn du mit Spritekit arbeitest, solltest du bei Übergängen bleiben, wenn du keinen wirklichen Grund hast etwas zu tun, was du erreichen willst. Natürlich gibt es Fälle, in denen Sie zum Beispiel etwas über eine aktuelle Ansicht präsentieren müssen, aber das ist immer noch SpriteKit. Darf ich fragen, was ist der Grund dafür? – Whirlwind

+0

@Whirlwind Ich bin mir nicht sicher, wie ich den rootViewController "packen" soll, und ich versuche Gamekit-Matchmaking, also möchte ich von einem Sprite-Kit-Menü zum Suchen von Matches wechseln, bisher kein Glück. – Asphys

+0

Suchen Sie einfach, wie Sie den View-Controller aus der Szene heraus darstellen. Ich bin nicht am Computer, deshalb kann ich keine passende Antwort schreiben. Aber Sie werden es wahrscheinlich herausfinden. Es ist ziemlich einfach. – Whirlwind

Antwort

1

Zuerst richten Sie sich einen Delegaten mit einem Protokoll für Ihre View-Controller.

protocol UIViewControllerDelegate{ 
} 

Siehe hier: https://makeapppie.com/2014/07/01/swift-swift-using-segues-and-delegates-in-navigation-controllers-part-1-the-template/ für ein schönes Tutorial, wie man diese Delegierten zu tun, dass

eine SKView Klasse erstellen, die auf Ihrem viewDidLoad in Ihrer UIViewController Klasse

class GameView : SKView 
{ 
     var delegate : UIViewControllerDelegate? 
} 

Dann bewirten werden, Weisen Sie den Stellvertreter Ihrem View-Controller zu.

override func viewDidLoad() 
{ 
    if let view = self.view as? GameView 
    { 
     view.delegate = self 
    } 
} 

Jetzt ist Ihre Ansicht, die einen Delegierten zu Ihrem View-Controller hat, von diesem Punkt in Ihrer Protokolldatei, stellen eine Methode

Z.B. für den Übergang

protocol UIViewControllerDelegate 
{ 
    optional func transitionToMenuVC() 
} 

Dann wenden Sie den Code auf Ihre View-Controller-Klasse.

class ViewController : UIViewController, UIViewControllerDelegate 
{ 
    ... 
    func transitionToMenuVC() 
    { 
     // do transition code here 
    } 
} 

Jetzt haben Sie alles eingerichtet, damit Ihre Ansicht mit Ihrem View-Controller kommunizieren kann.

in der Szene, würden Sie nur den Blick auf die GameView der Szene werfen, und verwenden Sie den Delegaten

class GameScene : SKScene 
{ 
    ... 
    func transition() 
    { 

     if let view = self.view as? GameView 
     { 
      view.delegate.transitionToMenuVC() 
     } 
    } 
} 

Sie weisen jedoch den Übergang, ist es unmöglich, von Szene zu über Controller zu sehen, weil sie 2 verschiedene Tiere. Sie werden die Ansichten wechseln und sind daher mit den Animationen für Ansichten festgefahren.

+0

Die Klasse GameView: SKView { var Delegat: UIViewControllerDelegate? } gibt mir einen Fehler: Verwendung von undeclared Typ 'UIViewControllerDelegate' – Asphys

+0

@Asphys was ist damit – Knight0fDragon

+0

Sie müssen dieses Protokoll machen, nennt das Tutorial es 'FooTwoViewControllerDelegate', ich nannte es UIViewControllerDelegate – Knight0fDragon