[iOS 10] iOS Human Interface GuidelinesのHaptic Feedbackを読んでみる

2016.10.04

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

Haptic Feedbackとは

日本語では「触覚フィードバック」と訳されます。
例えば、MacBookの感圧トラックパッドでも実際に押し込んだ感じがする、でも電源落とすと押し込んだ感じがしなくなる不思議なあれです。 iPhone 7 及び iPhone 7 Plusではホームボタンが物理ボタンではなくなったことをご存知の方も多いかと思います。

更にiOS 10では上記デバイスでHaptic FeedbackのAPIがアプリから使えるようになりました。 それに伴いiOS Human Interface GuidelinesにもHaptic Feedbackの項目が追加されていたので読んでみました。
※2016年10月4日現在、Haptic Feedbackについては英語のドキュメントにのみ書かれています。
※なお、以降説明のためにHaptic FeedbackはHFと略します。

ガイドラインの内容(意訳)

  • システム標準のインタフェース(ピッカー、スイッチ、スライダー)は自動でHFを提供している
  • 自作アプリでもHFを生成することが可能(ただし、強さや振る舞いはOSが管理する)

フィードバックの種類

  • Notification
    • タスクやアクションの成功/失敗、警告を表現
  • Impact
    • 衝突などの重さ(軽い、中くらい、重い)を表現
    • 見た目の体験を補完する役割
  • Selection
    • 選択の変化を表現(例えば、ピッカーのホイールをスクロールすると軽いタップを感じる)

HFを使う上で注意点

  • 使いどころをよく考えてから使う事
    • 使いすぎると混乱を招く。フィードバックの意義が無くなってしまう。
  • 一般的にユーザーが開始したアクションに対するレスポンスとして使用する
    • 自分が開始したアクションであればそのフィードバックだとの認識が容易であるため。
  • フィードバックの種類を勝手に定義しないこと
    • ユーザーが一貫した体験をするために目的通りにフィードバックを使うこと
    • 例えば、impactフィードバックをタスクの成功をユーザーに知らせるために使用してはいけない。ちゃんと、NotificationフィードバックのSuccessバリエーションを使うこと。
  • 視覚体験を微調整すること
    • 視覚とHFを一緒に提供することで、アクションと結果の間に深いつながりを作ることができる。
    • ユーザーが感じるものとマッチするようにアニメーションはハッキリとした正確なものにすること。
  • コミュニケーションをHFに頼らないこと
    • 全てのデバイスがHFをサポートしているとは限らない。
    • ユーザーは設定でHFの機能を無効に出来る(常に使えるとは限らない)
    • HFはデバイスがアクティブかつアプリが最前面にいる場合のみ発生する
    • 重要な情報についてはユーザーが逃さないようにするために見た目と音で補完すること
  • 見た目によるフィードバックが隠れてしまう場合にHFを使う
    • 例えば、画面上であるオブジェクトをある位置にドラッグする場合、指で対象は隠れてしまう。ユーザーに特定の位置までドラッグしたことを知らせるためのフィードバックを生成することを検討すること。
  • HFを開始する前にTaptic Engineを準備すること
    • HFを使うと関連するレイテンシーが発生するため、フィードバックをリクエストする前にTaptic Engineの準備を行うのがベスト。それを行わないと、HFが遅れてやってきて、ユーザーがアクションや画面上で見ているものとの繋がりを感じなくなってしまう。
  • 音と同期すること
    • HFは音と自動的に同期しない。HFと同時に音を使うなら開発者の責任で同期すること

実際にHFを使うにあたって

ガイドラインにある通り、HFはフィードバックを補完する目的で使用すること、使いどころを見極めポイントを絞って使う事が推奨されているようです。 また、UIFeedbackGeneratorのAPI Referenceには、 HFを開始する前にTaptic Engineを準備することに該当する関数としてUIFeedbackGeneratorprepare()が用意されていますが、prepare()を呼んでからフィードバック発生までの時間が長すぎるとフィードバック発生の前にTaptic Engineがアイドル状態になってしまい、逆にprepare()を呼ぶのがフィードバック発生の直前など遅すぎると、レイテンシー低減の効果が得られないとあります。このあたりは実際に試してみて微調整する必要がありそうなので、分かり次第記事にしてみたいと思います。

参考