iOSのUIガイドライン Human Interface Guidelines を読んでみる part2

## ユーザーインタラクション

### 3D Touch

サポートされているデバイスでは、タッチスクリーンにさまざまなレベルの圧力を加えることで、追加の機能にアクセスできます。
ビッてメニューが出ます。
iOS 13以降を実行しているデバイスでは、デバイスが3Dタッチをサポートしているかどうかに関係なく、長押しでメニューが出ます。

### アップルペンシル

Apple Pencilは、iPadアプリでメモをメモしたり、スケッチしたり、ペイントしたり、ドキュメントをマークアップしたりするときに、ピクセルレベルの精度を提供する多用途で直感的なツールです。
利き腕の設定もできます。

### オーディオ

※開発者向けの部分のみ

ボリュームビューはカスタマイズ可能で、音量レベルのスライダーが含まれ、MPVolumeViewフレームワークで利用可能です。
短い音やバイブレーションには、システムのサウンドサービスを使用してください。
必要がない場合は、他のアプリからの音楽の再生を停止させないでください


### 認証

追加機能へのアクセス、コンテンツの購入、データの同期など、ユーザにとって価値がある場合にのみ認証を要求します。
アプリで認証が必要な場合は、Appleでのサインインを使用して、簡単で安全なサインイン方法を提供します。
Appleでのサインインをサポートすると、信頼できる一貫したサインインエクスペリエンスと、複数のパスワードを覚えておく必要がないという便利さを実現できます。

#### Appleでのサインインを使用しない場合は、パスワードオートフィルを使用
パスワードオートフィルを使用することで、
パスワードとセキュリティコードを自動的に生成して入力するため、認証画面に費やす時間を短縮できます。
すべてのアプリがこの機能をサポートする必要があります。
https://developer.apple.com/documentation/security/password_autofill/

#### サインインを可能な限り直前に行う
ユーザーは、機能を利用する前にサインインを余儀なくされたとき、アプリを放棄することがよくあります。

アプリを使用する前に、アプリに恋する機会を与えましょう。（アプリに恋する機会っておしゃれですな）


#### 認証の利点と、サービスにサインアップする方法を説明する

アプリで認証が必要な場合は、要件の理由とその利点を説明する簡潔でわかりやすい説明をログイン画面に表示します。

### 適切なキーボードを表示して、データ入力を最小限に抑えます。
たとえば、電子メールアドレスを要求する場合は、電子メールのキーボード画面を表示します。
この画面には、便利なデータ入力ショートカットが含まれています。
[UIKeyboardType](https://developer.apple.com/documentation/uikit/uikeyboardtype)


#### パスコードという用語は決して使用しないこと

パスコードは、生体認証が無効になっているときに、ユーザーのiOSデバイスのロックを解除し、Apple Payで認証するために使用されます。

#### 常に認証方法を識別する

たとえば、Face IDを使用してアプリにサインインするためのボタンのタイトルは、「Sign In」ではなく「Sign In with Face ID」にする必要があります。

 <img src="https://developer.apple.com/design/human-interface-guidelines/ios/images/Authentication_FaceID_2x.png" width="40%">

#### アイコンを使用してシステム認証機能を識別しないこと

システムのTouch ID（拇印）アイコンとFace IDアイコンのようなアイコンが表示された場合、
ユーザーは認証する必要があると考えています。
認証機能を識別するためにアイコンを使用すると、アイコンの違いや大きさの違いなど不整合が生じ、ユーザーを混乱させる場合があります。


### データ入力

ドラムロールのようなインターフェイス要素をタップする場合でも、キーボードを使用する場合でも、
情報の入力は面倒なプロセスになる可能性があります。
多くの入力を要求することでプロセスを遅くすると、ユーザーは面倒に感じ、アプリの利用を中断することさえあります。

 <img src="https://developer.apple.com/design/human-interface-guidelines/ios/images/Data_Entry_1_2x.png" width="40%">
 <img src="https://developer.apple.com/design/human-interface-guidelines/ios/images/Data_Entry_2_2x.png"" width="40%">

#### 可能な場合は、選択肢を提示する

データ入力をできるだけ効率的にします。
たとえば、定義済みのオプションのリストから選択する方が応答を入力するより簡単なので、
テキストフィールドの代わりにピッカーまたはテーブルを使用することを検討してください。

#### 可能な限りシステムから情報を取得する

連絡先やカレンダー情報など、自動的に、またはユーザーの許可を得て収集できる情報利用してください。

#### 適切なデフォルト値を指定する

最も可能性の高い値をフィールドに事前入力します。
適切なデフォルトを提供すると、意思決定が最小限に抑えられ、プロセスが高速化します。

#### 必要な値を収集した後でのみ前進を有効にする

[次へ]または[続行]ボタンを有効にする前に、すべての必須フィールドに値があることを確認してください。
ボタンの有効化を、次に進むときの視覚的な合図として使用します。

#### フィールド値を動的に検証する

長いフォームに記入した後で戻って間違いを修正しなければならないときはイライラします。
なので、可能な限り、次のステップに進む前に正しい値かユーザーに示してください。

#### 目的を伝えるのに役立つヒントをテキストフィールドに表示
テキストフィールドには、空の場合、「Eメール」や「パスワード」などのプレースホルダーテキストを含めることができます。
プレースホルダーテキストで十分な場合は、テキストフィールドの説明に別のラベルを使用しないでください。

<br>
### ドラッグアンドドロップ

#### 可能な限り、ドラッグアンドドロップを元に戻せるようにしてください。
ユーザーが誤って間違った場所にコンテンツをドロップした場合、ドロップされたコンテンツを削除し、
アプリ内の別の場所から移動した場合は、元の場所に復元する必要があります。

#### 必要に応じて、ドラッグアイテムのプレビューをカスタマイズ

基本的にドラッグされているコンテンツのバックのビューは半透明の表現である必要があります。
この外観はドラッグが進行中であることを示します。

#### アプリのコンテンツの転送に時間がかかるか、リソースを集中的に使用する場合は、ファイルプロバイダー拡張機能を実装する

ファイルプロバイダー拡張機能が転送プロセスを管理し、アプリが実行されていなくても転送プロセスが完了することを保証します。
転送プロセスは、ユーザーがコンテンツをドロップするまで開始されないことに注意してください。
開発者向けガイダンスについては、NSFileProviderExtensionを参照してください。

#### アプリのコンテンツの転送に時間が必要な場合は、進捗情報を提供する

コンテンツをダウンロードする必要がある場合や、大きなファイルをコピーするのに時間がかかる場合は、進捗情報を提供します。
少なくとも、コンテンツの合計サイズを指定して、残り時間を計算し、適切な進行状況インジケーターを表示できるようにします。
開発者向けガイダンスについては、NSProgressを参照してください。

#### 強調表示

コンテンツがドラッグされると、ビューが微妙に点滅して色が変化したり、
ドラッグされた画像のためのスペースを空けるために段落が離れたりすることがあります。
逆にコンテンツがドロップされたときは強調表示が削除されていることを確認してください。

### フィードバック

フィードバックは、アプリが何をしているかを理解し、次に何ができるかを発見し、アクションの結果を理解するのに役立ちます。

<img src="https://developer.apple.com/design/human-interface-guidelines/ios/images/Feedback_2x.png">

#### ステータスや他のタイプのフィードバックを控えめに

ユーザーはアクションを実行したり中断したりすることなく、重要な情報を取得できるのが理想です。
たとえば、OS表中のメールアプリは、メッセージのメールボックスをアップデートし最新にしている間、
ステータス情報をツールバーに下部に表示します。
この情報は画面上の主要なコンテンツと競合しませんが、いつでも一目で確認できます。

#### 不要なアラートを減らす

アラートは強力なフィードバックメカニズムですが、ユーザーが不利益になる、もしくはアプリが続行できなくなるような場合にのみ表示するのが理想です。
重要な情報が含まれていないアラートが多すぎると、アラートを無視するようになります。

### ファイルの取り扱い

<img src="https://developer.apple.com/design/human-interface-guidelines/ios/images/file_handling_2x.png" width="30%">


#### キャンセルまたは削除しない限り、作業は常に保持されるという確信を植え付けると良い

基本的にはファイルを明示的に保存しないでください。
代わりに、ファイルを開いたり閉じたりするとき、および別のアプリに切り替えるときに変更を自動的に保存します。
既存のファイルの編集中など、場合によっては、編集内容が実際にいつキャプチャされたかを確認するために、
保存とキャンセルボタンを明示することが良い場合もあります。

#### ユーザーがアプリを離れることなくファイルをプレビューできるようにする

クイックルックを使用すると、Keynote、Numbers、Pagesのドキュメント、PDF、画像、およびその他の特定の種類のファイルのコンテンツを
アプリで実際に開かなくても表示できます。

### ゲームコントローラー

割愛します

### ジェスチャー


#### 原則として、標準のジェスチャーを使用

ゲームなど独自の世界観をもち、没入感をもたらすためのカスタムジェスチャーは推奨されますが、
一般的なアプリでユーザーが意図しているものと違う挙動は行わない方が得策です。


#### システム全体の画面端のジェスチャーを妨げないこと

面の端のジェスチャーでホーム画面、アプリスイッチャー、通知センター、コントロールセンターにアクセスできます。
ゲームなどで画面端のジェスチャーを使う場合は、最初のスワイプでアプリ固有のジェスチャーが呼び出され、2回目のスワイプでシステムジェスチャーが呼び出されます。
UIViewControllerの[preferredScreenEdgesDeferringSystemGestures](https://developer.apple.com/documentation/uikit/uiviewcontroller/2887512-preferredscreenedgesdeferringsys)プロパティを参照してください。

#### 標準ジェスチャー

[標準ジェスチャー一覧](https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/gestures/)

おそらく大体は知っているジェスチャーでしたが「3本指でつまむ」「3本指でスワイプします。」「シェイク」などあまり親しみのないものもあります。

### ハプティクス

ハプティクスは、画面上のインターフェイスとの対話体験を強化するために、人々の触覚に働きかけます。
視覚的、聴覚的なものはもちろん触覚に働きかけることでよりユーザー体験は向上します。

#### システムハプティクス

スイッチ、スライダー、ピッカーなどの標準のUI要素を使用して、デフォルトでAppleが設計したシステムハプティクスを再生します。

例えば、ピッカーで選択肢を動かしている時。
スクロールするときに軽くたたく感じがします。
このフィードバックは、選択を行ったり確認したりするのではなく、一連の離散値を通じて動きを伝えることを目的としています。
他のものについては[ハプティクスのページ](https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/haptics/)、[UIFeedback Generator](https://developer.apple.com/documentation/uikit/uifeedbackgenerator)などを参照してください。

#### カスタムハプティクスパターンの作成

iOS 13以降では、Core Hapticsはカスタムハプティックパターンを生成する2つの基本的なビルディングブロックを提供します。

- ホーム画面の懐中電灯ボタンをタップするなど、タップや衝動のように感じられる簡潔でコンパクトなエクスペリエンスです。
- メッセージ内のレーザー効果の経験など、持続的な振動のように感じる連続イベント

カスタムハプティックの生成に選択したビルディングブロックに関係なく、そのシャープネスと強度を制御することもできます。
詳しくは[コアハプティクス](https://developer.apple.com/documentation/corehaptics)を参照してください。


### NFC(近距離無線通信)

たとえば、ユーザーがおもちゃをスキャンしてビデオゲームに接続したり、
買い物客が店内の看板をスキャンしてクーポンにアクセスしたり。
近距離無線通信（NFC）を使用すると、互いに数センチ以内のデバイスがワイヤレスで情報を交換できます。
タップアンドタッチではなく、スキャンアンドホールドのような用語を使用します。

#### 近距離無線通信は、一部の人には不慣れな場合があります。

親しみやすいものにするために、NFC、コアNFC、近距離無線通信、タグなどの
技術的で開発者向けの用語を参照することは避けてください。
見た目でわかりやすいオブジェクト名にしてください。（WiFiパスワードを共有するためiPhone同士を近づけてくださいなど）


### ポインター(iPadOS)

割愛

### Undo and Redo

多くのアプリでは、デバイスをシェイクして、入力や削除などの特定の操作を元に戻したりやり直したりできます。
この方法で開始すると、アラートは、元に戻す操作またはやり直し操作を確認またはキャンセルするようにユーザーに要求します。

## 最後に

**part3へ続く...**