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
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)
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.