4

そのため、watchOS 3.0 の時点で、デジタル クラウンの回転を取得できるようになりました。InterfaceController でCrownDidRotate関数を使用することができました。しかし、SKScene クラス内からクラウンの回転を取得できません。私は今かなり迷っています。ありがとう。

4

2 に答える 2

8

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:)では、そのアウトレットを介してシーンにアクセスし、クラウン デリゲートとして設定できます。)

于 2016-06-15T03:53:12.497 に答える
0

watchOS 3 では、デリゲートとして設定することで、どのオブジェクト オブジェクトでもデジタル クラウン イベントを取得できます。

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

次に、以下を実装して値を読み戻します。

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

focus()UI が画面に収まり、実際のスクロールを必要としないコントローラの場合は特に、を呼び出すことが重要です。

于 2016-09-28T12:26:55.270 に答える