iOSアプリでジェスチャーベースのナビゲーションシステムの設計

Gesture ベースのナビゲーションは、現代の iOS アプリの設計の礎となり、流体、直感的な相互作用がほとんど物理的に感じられます。 目に見えるボタンやメニューの信頼性を低下させることで、ジェスチャーは画面の不動産を解放し、より没入型ユーザー体験を作成します。 Apple の UIKit は、ジェスチャーアクセサの堅牢なセットを提供しますが、効果的なナビゲーションシステムの設計には、思考計画、ヒューマン インターフェイスのガイドラインの理解、および厳格なテストが必要です。 この記事では、ナビゲーションがどのように役立つかを調べる方法を説明します。

なぜ地理ベースのナビゲーションマター

タッチジェスチャーは、自然人間の動きをデジタルアクションにマップします。 背中を背負うスワイプは、物理的オブジェクトを横に押し込む行為をミラーリングします。 ズームへのピンチは、表面を伸ばしたり、圧縮したりするような感じです。 このアライメントは、認知負荷を減らし、ナビゲーションを第二の性質にします。 iOSアプリでは、ジェスチャーベースのナビゲーションは、伝統的なナビゲーションバー、タブバー、バックボタンを交換し、コンテンツに焦点を当てたクリーナーインターフェイスにつながります。 しかし、ほとんど設計されていないジェスチャーは、適切な技術革新をすることができます。

iOSナビゲーションのコアジェスチャー

Appleのヒューマンインターフェースガイドライン(HIG)は、ユーザーがアプリ間で一貫して動作することを期待する標準的なジェスチャーを定義しています。これらの使い慣れたインタラクションを活用することで、ユーザーは自宅で感じることができます。

スワイプ

旋回ジェスチャーは、おそらくナビゲーションのために最も汎用性です。左または右をスワイプすると、ビュー間で遷移することができます(例えば、フォトギャラリー)、サイドバーメニュー(多くのナビゲーションベースのアプリの左端からスワイプ)、または画面を解除(UINavigationControllerでスワイプ)。方向の問題:縦のスワイプは、多くの場合、モーダルをスクロールまたは却下するために使用されます。

タップ

簡単なタップは選択の基礎です。ナビゲーションコンテキストでは、タップは階層に深く入ります(例えば、テーブルビューで行をタップ)。または、下部シートを開くようなアクションをトリガーします。 ナビゲーションには、二重タップはあまり一般的ではありませんが、コンテンツをズームすることができます。

ピンチ

ピンチジェスチャーは、主にマップ、画像、文書をズームするために使用されます。ナビゲーションでは、ピンチは、概要と詳細モード(例えば、グリッドビューにズームアウト)の間で切り替えることができます。

ロングプレス

長いプレス(または以前のデバイスに触れる)は、ナビゲートせずにコンテキストメニュー、プレビュー、またはより速いアクションを明らかにします。たとえば、メッセージプレビューを長押しすると、完全な会話を開くことなく、応答オプションが表示されます。

エッジスワイプ

画面エッジ(左端から戻ってくる、右端のiPadのPeek / POP)からスワイプすると、アプリがそれをオーバーライドする理由が強い限り尊重すべきシステムレベルのジェスチャーです。 ユーザーの混乱を防ぐためのシステムジェスチャーと競合しないでください。

地理ベースのナビゲーションの設計原則

成功のジェスチャーナビゲーションは、認識者を添付するだけでなく、それは包括的な設計アプローチが必要です。

発見可能性

ゲスチャーは見えない。ユーザーは、教えたり、直感的に理解しなければなりません。視覚的ヒント(例えば、微妙な矢印、ドラッグインジケータ、または最初の起動時にオーバーレイするチュートリアルなど)を使用してください。一貫したパターンは、常に左にスワイプするような、ユーザーがすぐに学ぶのに役立ちます。

コンサルティング

プラットフォームの慣習に従ってください。ユーザーは、ナビゲーションスタックで「戻る」という意味の正しいスワイプを期待しています。 何か他のものに適したスワイプを使用する場合は、明確なコンテキストを提供します。 アプリ内で、画面全体でジェスチャーを均一に保ちます。

フィードバック

あらゆるジェスチャーは、即時、明確なフィードバックを提供しなければなりません。視覚的フィードバック(ジェスチャーと一緒にビューをアニメーション化)、ハプティックフィードバック(UIImpactFeedbackGeneratorまたはUINotificationFeedbackGeneratorを使用して)、およびオーディオキュー(適切な場合)は、ジェスチャーが認識されていることを確認します。フィードバックなしで、ユーザーは繰り返しスワイプし、フラストレーションエクスペリエンスを作成します。

アクセシビリティ

ユーザは、すべてのユーザが、精度でジェスチャーを実行することができます。ナビゲーションの代替方法を提供:ボタン、キーボードショートカット(キーボード付きiPadの場合)、ボイスオーバーカスタムアクション、およびスイッチ制御のサポート。ジェスチャーが重要なアクションを実行する唯一の方法ではありませんことを確認してください。

紛争を避ける

複数のジェスチャーの認識者が同じビュー(または親ビュー)に添付されている場合、競合は発生する可能性があります。例えば、カードを却下するスワイプは、カード内のスクロールにスワイプすると衝突する可能性があります。 ]のようなデリゲートメソッドを使用して、ジェスチャーの依存関係を設定して、ジェスチャーを優先します。

パフォーマンス

ゲスチャーの処理は流体でなければなりません。重いアニメーションや同期の計算は、ゲスチャをラグまたはスタッタに引き起こすことができます。標準のパンニングにとその内蔵のジェスチャーアクサを使用してください。カスタムジェスチャーのために、ハンドラメソッドを軽量に保ち、スムーズなアニメーションのためにを使用して検討してください。

iOSでジェスチャー認識装置を実装

iOSは、[の下のコンクリートジェスチャーアクサのセットを提供します。 一般的なナビゲーションパターンを実装する方法は次のとおりです。

基本セットアップ

ゲスチャー・アクセサを即座に特定し、そのターゲットとアクションを設定し、プロパティ(方向、タップ数など)を設定し、ビューに添付します。スワイプ・ナビゲーションの例:

let swipeBack = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipeBack))
swipeBack.direction = .right
view.addGestureRecognizer(swipeBack)

高度な構成

より詳細な制御には、デリゲートプロトコルを使用します。例えば、ユーザーの指が左端付近で開始したときにのみ、スワイプジェスチャーを許可するには(バックのエッジスワイプ)

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
 guard let swipe = gestureRecognizer as? UISwipeGestureRecognizer else { return false }
 let location = swipe.location(in: view)
 return location.x < 30
}

同時ジェスチャー処理

スクロールビューやコレクションビューが関与しているときは、ジェスチャーを一緒に作業できるようにする必要があります。 [] を使用して、互換性のあるジェスチャーの ] を返す、および 優先順位を設定します。

カスタムトランジション

完全にジェスチャー主導のナビゲーションでは、カスタムビューコントローラーの遷移でジェスチャーシーサーをペアリングします。例えば、デフォルトのiOSのバックジェスチャーと同様に、ユーザーの指を従うインタラクティブなポップアップトランジションを実行します。これはを使用して、ナビゲーションコントローラのデリゲートでパンまたはスワイプジェスチャーにリンクします。

ゲスチャーでメニューナビゲーションをデザインする(例)

多くの近代的なiOSアプリは、左からスライドするハンバーガーメニューを使用します。 ジェスチャーベースの代替手段は、サイドパネル(iPadの分割ビューのような)を明らかにするために、スワイプからエッジになる可能性があります。 これを構築するには:

  1. エッジパンジェスチャーアクセサをメインコンテンツビューに取り付けます(エッジ:.left)。
  2. 妊娠が始まり、メニュービューを左にオフスクリーンに追加します。変更すると、xの位置を比例して更新します。最後に、速度/位置に基づいて完全に開いているか、または閉じます。
  3. 拭き取れないユーザにボタンをつけます。
  4. 対話型アニメーションにを使うと、中身を反転させることができるようになります。

底面シート、横パネル、またはスワイプ可能なタブに拡張できます。

地理の運行のテストそして精製

徹底したテストは、非交渉可能です。 地理認識装置は、分割画面、またはシステムジェスチャー(例えば、ホームインジケータ、アプリのスイッチャー)が関与するときに、異なるデバイスで予期しない動作することができます。

ツールとメソッド

  • [Xcode Debugger:[]ビューデバッグペインを使用して、ジェスチャ認識者の状態を可視化(posable, start, change, end, Cancel, failed)。
  • []アクセシビリティ・インスペクタ:[]])。ボイスオーバーユーザーがすべてのアクションにアクセスできることを確認します。
  • :]]: 実際のユーザがジェスチャーを実行しているかどうかを観察します。 躊躇、偶発的なトリガー、または繰り返しの試みに注意して下さい。
  • パフォーマンス監視:]]コアアニメーション機器を使用して、ジェスチャー実行中のフレームレートをチェックします。

一般的なピトル

  • [] 対談トリガー:[ ユーザが行を選択しようとすると、戻ってくるスワイプが誤解釈される可能性があります。 最小ドラッグ距離または特定の開始エッジを必要とすることによって、移行します。
  • []システムジェスチャーコンフリクト:[]フェイスID付きのiPhoneでは、ホームインジケータスワイプは、ボトムエッジジェスチャーと競合することができます。 []プロパティを使用して、最初にジェスチャーを許可しますが、常にフォールバックを提供します。
  • []Poor Discoverability:]] ユーザーがジェスチャーが存在しない場合は、それらはスタックします。 タイムアウト後にボタンを明らかにするオンボーディング、永続的なヒント、または適応的なUIを使用します。

アクセシビリティと包括的なデザイン

ゲスチャーベースのナビゲーションは、モーター障害を持つユーザーを除外してはならない。 これらのプラクティスに従ってください:

  • [代替制御:[]]] - ボタンまたはキーボードショートカットを介してすべてのジェスチャートリガーアクションが利用可能である必要があります。 たとえば、スワイプツー削除は、削除ボタンを示すロングプレスであることもできます。
  • []VoiceOver:]]] で、指定されたアクションとしてジェスチャーアクションを明示するために[を使用します。例えば、 "Swipe back"は、ロータでカスタムアクションになることができます。
  • []Reduce Motion:]] チェックをします。 リクエストされたときに、parallax または スライドインメニューを単純フェードトランジションで置き換えます。
  • [タッチ宿泊施設:]]は、常に、応答行動を変更する、AnalystiveTouchとTouch Accommodationsの念頭に置いてください。

コンテンツ

iOSアプリでジェスチャーベースのナビゲーションシステムの設計は、魅力的でモダンなユーザーインターフェイスを作成する強力な方法です。 ゲスチャーアクセサの根本的な理解によって、Appleのデザインの原則に付着し、アクセシビリティを優先し、自然と楽に感じたナビゲーションを構築することができます。 システム標準のジェスチャーから始めて、経験を本物的に改善し、常に多様なユーザーベースでテストするときにのみカスタムを追加してください。 右に行われたとき、ジェスチャーはナビゲーションが消え、ユーザーに集中してタスクを集中させ、タスクを促し、ユーザーを集中させます。

更に読むには、Appleの]のGestures[のヒューマンインターフェースガイドライン、]]]UIKitジェスチャー認識文書]、優れた記事「[]」のWWDC 2018から流体相互作用]を設計する。 アクセシビリティのベストプラクティスについては、[[FLT]Appleの互換性HLT:[HLT:]]を参照してください。 [[FLT:[FLT:]]]アクセス: [FLT:[FLT:]]]]] [FLT: [FLT:[FLT:[FLT:[FLT:[FLT:]]]]]]]]] [FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:]]]]]]]]]]]]]]]]]]]]]]]]]]]