2016-06-14 6 views
4

watchOS 3.0の時点で、デジタルクラウンの回転を取得できるようになりました。私はcrownDidRotate関数をInterfaceControllerで使うことができました。 SKSceneクラスの内側からクラウンの回転を得ることはできません。 誰かがこれで私を助けることができますか私は今かなり失われていますか?おかげさまで お使いのインタフェースコントローラのものcrownDidRotateのコールを取得するにはwatchOS 3.0 SpriteKitでクラウン回転を検出

答えて

7

は、あなたのインタフェースコントローラでWKCrownDelegateプロトコルを採用し、そのcrownSequencerdelegateとしてあなたインタフェースコントローラを設定する必要がありました。

、他のいくつかのクラスでcrownDidRotateのコールを取得し、そのクラスにWKCrownDelegateプロトコルを採用し、あなたのインタフェースコントローラのcrownSequencerdelegateとして、そのクラスのインスタンスを設定します。

おそらくあなたはすでにあなたのSpriteKitベースのシーンを設定するには、このようないくつかのコードを持って:あなたはMySceneクラスでWKCrownDelegate適合を宣言した場合は、単にのデリゲートとして設定する行を追加し、

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")) 
    } 
} 

をインタフェースコントローラのクラウンシーケンサー:

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

(あるいは、ストーリーボードであなたのWKInterfaceSKSceneの場面を設定している場合、あなたはまだインターフェースからWKInterfaceSKSceneを参照することができます。コントローラーはIBOutletです。その後awake(withContext:)に、あなたはその出口を通ってシーンにアクセスすることができますし、クラウンデリゲートとして設定)

0

をwatchOS 3では、単に任意のオブジェクトのオブジェクトはデリゲートとして、それらを設定することにより、デジタル冠イベントを取得することができます。

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

は次に実装することにより、値をリードバック:

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

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

関連する問題