2016-06-14 16 views
4

So wie von watchOS 3.0 können Sie jetzt die Rotation der digitalen Krone bekommen. Ich habe es geschafft, die crownDidRotate Funktion in einem InterfaceController zu verwenden. Aber ich kann die Rotation der Krone nicht aus einer SKScene Klasse bekommen. Kann mir jemand helfen? Ich bin jetzt ziemlich verloren? Danke.watchOS 3.0 erkennt Kronendrehung in SpriteKit

Antwort

7

Um diese crownDidRotate Anrufe in Ihrem Interface Controller bekommen, musste man das WKCrownDelegate Protokoll in Ihrem Interface-Controller zu übernehmen, und stellen Sie Ihre Schnittstellen-Controller als delegate seiner crownSequencer.

Um crownDidRotate Anrufe in einer anderen Klasse zu erhalten, nimmt das WKCrownDelegate Protokoll in dieser Klasse, und legen Sie eine Instanz dieser Klasse, die als delegate Ihre crownSequencer des Schnittstellen-Controller.

Vermutlich haben Sie bereits einige Code wie folgt Ihre SpriteKit Szene einzurichten:

class InterfaceController: WKInterfaceController { 

    @IBOutlet var spriteGizmo: WKInterfaceSKScene! 

    override func awake(withContext context: AnyObject?) { 
     super.awake(withContext: context) 

     let scene = MyScene(fileNamed: "MyScene") 
     spriteGizmo.presentScene(MyScene(fileNamed: "MyScene")) 
    } 
} 

Wenn Sie WKCrownDelegate Konformität in Ihrer MyScene Klasse deklariert haben, fügen Sie einfach eine Zeile es als Delegierter des einzustellen Schnittstellen-Controller Krone Sequenzer:

let scene = MyScene(fileNamed: "MyScene") 
spriteGizmo.presentScene(MyScene(fileNamed: "MyScene")) 
crownSequencer.delegate = scene 

(Alternativ können Sie Ihre WKInterfaceSKScene ‚s Szene im Storyboard festgelegt in diesem Fall können Sie immer noch die WKInterfaceSKScene von Ihrer Schnittstelle verweisen. Controller mit einem IBOutlet. Dann in awake(withContext:), können Sie die Szene durch diesen Ausgang zugreifen und sie als Krone Delegierten eingestellt)

0

In watchOS 3 irgendein Objekt-Objekt kann digitale Krone Ereignisse erhalten, indem sie als Delegierter Einstellung.

let crownSequencer = WKExtension.shared().rootInterfaceController!.crownSequencer 
crownSequencer.delegate = self 
crownSequencer.focus() 

Dann lesen Sie den Wert wieder durch die Implementierung:

func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) 

Es ist wichtig, die focus(), vor allem für Controller, dessen UI passt den Bildschirm zu rufen und nicht die tatsächlichen Bildlauf benötigen.