watchOSに搭載されている触覚フィードバック(Haptic Feedback)を試す
AppleWatchには触覚フィードバック(Haptic Feedback)があります、通知が届くとブルブルと震えるあれです。デフォルトでは9種類のフィードバックが用意されていて、それぞれ振動するパターン(や音も?)が異なります。9種類のHaptic Feedbackを試すwatchOSアプリを作りました。
Haptic Feedback
ハプティックの種類はWKHapticTypeで定義されています。
ヘッダーファイルの定義を確認してみます。
@available(watchOS 2.0, *)
public enum WKHapticType : Int {
case notification = 0
case directionUp = 1
case directionDown = 2
case success = 3
case failure = 4
case retry = 5
case start = 6
case stop = 7
case click = 8
}
フィードバックを実行するにはWKInterfaceDeviceのplay()に呼び出したいWKHapticTypeを渡します。
例えば notificationのフィードバックを呼び出す場合は以下のようになります。
WKInterfaceDevice.current().play(.notification)
それぞれのフィードバックがどんな感じの振動なのか実際に試すことができるアプリを作りました、コードはこちらです。
複数のタイプから選んで実行できるようにしたいのでStoryboardでTableを使うことにしました。
WKInterfaceControllerにアウトレットを定義して接続しておきます。
@IBOutlet weak var table: WKInterfaceTable!
Tableにラベルを持たせるためにカスタムクラスを作成します。
class MyRowController: NSObject {
@IBOutlet weak var itemLabel: WKInterfaceLabel!
}
Table Row Controller に Custom Class をセットします。
同様にidentifierを指定しておきます。
この辺のやり方はWKInterfaceTableのドキュメントを参考にしました。
tableにデータを読み込ませるコードはこちらです。
func loadItems() {
let items = [
"notification",
"directionUp",
"directionDown",
"success",
"failure",
"retry",
"start",
"stop",
"click"
]
table.setNumberOfRows(items.count, withRowType: "MyRowController")
for (index, item) in items.enumerated() {
let row = table.rowController(at: index) as! MyRowController
row.itemLabel.setText(item)
}
}
ポイントはsetNumberOfRowsでidentifierを指定することと
setNumberOfRows(items.count, withRowType: "MyRowController")
rowControllerの戻り値を先ほど作成したCustomClassにキャストすること。
rowController(at: index) as! MyRowController
ラベルがタップされた時のコードを追加します。行番号に対応するHapticTypeを生成してplay()メソッドを呼び出しています。ラベルをタップするとフィードバックが実行されます。
override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) {
if let hapticType = WKHapticType(rawValue: rowIndex) {
WKInterfaceDevice.current().play(hapticType)
}
}
上記のコードを実行した時の表示はこちらです。テーブルにHapticのラベルが表示されています、タップすると振動します。
まとめ
・WKHapticTypeは9種類用意されている
・WKInterfaceDevice.play()を使ってアプリから呼び出すことができる
・Tableにアイテムを持たせる際はCustomClassを使う