[watchOS 3] 新クラス「WKCrownSequencer」を使用して Apple Watch‎ のデジタルクラウンの値を取得する #wwdc

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

watchOS 3 で「WKCrownSequencer」クラスが新規追加され、Apple Watch の ‎デジタルクラウンの値を取得することが出来るようになりました。本記事では、デジタルクラウンの値を取得する手順をご紹介します。

本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。

実装

さっそく、WKCrownSequencer を使ってデジタルクラウンの値を得る実装を紹介していきます。

インスタンス取得

WKCrownSequencer のインスタンスは自分で作ったらダメなようです。watchOS 3 で WKInterfaceControllercrownSequencer プロパティが追加されているのでこれを使用します。

let sequencer = self.crownSequencer

値変更イベントの受信を開始

デジタルクラウンの値を受け取り始めるためには WKCrownSequencerfocus() メソッドを使用します。

sequencer.focus()

デリゲートメソッドを実装

任意のオブジェクトを WKCrownDelegate のデリゲートにして、デリゲートメソッドを実装すれば、デジタルクラウンの値が変更されたイベントをハンドリングできます。

WKCrownDelegate には 2 つのメソッドが用意されているので必要なメソッドを実装します。

// デリゲートを設定
sequencer.delegate = self

crownDidRotate メソッド

crownDidRotate(WKCrownSequencer?, rotationalDelta: Double) メソッドは、ユーザーがデジタルクラウンを回転させた時に呼ばれます。

func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
    print("rotationalDelta:\(rotationalDelta) rotationsPerSecond:\(self.crownSequencer.rotationsPerSecond)")
}

このメソッドの rotationalDelta 引数と WKCrownSequencerrotationsPerSecond プロパティの値の意味は以下の通りです。

  • rotationalDelta 引数
    • 前回の更新からの差分を表す
    • デジタルクラウンを 1 回転させると、値は 1.0 になる
    • 回転方向によって符号がつく
  • rotationsPerSecond プロパティ
    • デジタルクラウンの1秒あたりの回転速度を表す
    • 必ず正の値になる

crownDidBecomeIdle メソッド

crownDidBecomeIdle(WKCrownSequencer?) メソッドはユーザーがデジタルクラウンの回転を止めた時に呼ばれます。

func crownDidBecomeIdle(_: WKCrownSequencer?) {
    print("crownDidBecomeIdle")
}

実行結果

アプリを実行してみたところ、以下のログが得られました。

rotationalDelta:0.0 rotationsPerSecond:0.0
rotationalDelta:0.0125 rotationsPerSecond:0.0
rotationalDelta:0.0125 rotationsPerSecond:0.0
rotationalDelta:0.01375 rotationsPerSecond:0.0
rotationalDelta:0.0125 rotationsPerSecond:0.0
rotationalDelta:0.01125 rotationsPerSecond:0.717350328657339
rotationalDelta:0.015 rotationsPerSecond:0.831662519507681
rotationalDelta:0.01125 rotationsPerSecond:0.756022415141964
rotationalDelta:0.015 rotationsPerSecond:0.831395277898851
rotationalDelta:0.0125 rotationsPerSecond:0.718074837905995
rotationalDelta:0.0025 rotationsPerSecond:0.226654052047093
rotationalDelta:0.0025 rotationsPerSecond:0.113374690043006
crownDidBecomeIdle

さいごに

本記事では、デジタルクラウンの値を取得する手順をご紹介しました。

今後も引き続き、watchOS 3 の新機能を試していきます。

参考資料