そのため、watchOS 3.0 の時点で、デジタル クラウンの回転を取得できるようになりました。InterfaceController でCrownDidRotate関数を使用することができました。しかし、SKScene クラス内からクラウンの回転を取得できません。私は今かなり迷っています。ありがとう。
2 に答える
crownDidRotate
インターフェイス コントローラでこれらの呼び出しを取得するには、インターフェイス コントローラでWKCrownDelegate
プロトコルを採用し、インターフェイス コントローラdelegate
をその のとして設定する必要がありましたcrownSequencer
。
crownDidRotate
他のクラスで呼び出しを取得するには、そのクラスのWKCrownDelegate
プロトコルを採用し、そのクラスのインスタンスをdelegate
インターフェイス コントローラーのとして設定しますcrownSequencer
。
おそらく、SpriteKit シーンをセットアップするための次のようなコードが既にいくつかあるはずです。
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"))
}
}
WKCrownDelegate
クラスで適合を宣言した場合MyScene
は、インターフェイス コントローラーのクラウン シーケンサーのデリゲートとして設定する行を追加するだけです。
let scene = MyScene(fileNamed: "MyScene")
spriteGizmo.presentScene(MyScene(fileNamed: "MyScene"))
crownSequencer.delegate = scene
(または、WKInterfaceSKScene
のシーンを Storyboard に設定することもできます。その場合でも、 をWKInterfaceSKScene
使用してインターフェイス コントローラから を参照できますIBOutlet
。その後、awake(withContext:)
では、そのアウトレットを介してシーンにアクセスし、クラウン デリゲートとして設定できます。)
watchOS 3 では、デリゲートとして設定することで、どのオブジェクト オブジェクトでもデジタル クラウン イベントを取得できます。
let crownSequencer = WKExtension.shared().rootInterfaceController!.crownSequencer
crownSequencer.delegate = self
crownSequencer.focus()
次に、以下を実装して値を読み戻します。
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double)
focus()
UI が画面に収まり、実際のスクロールを必要としないコントローラの場合は特に、を呼び出すことが重要です。