SwiftUIにおけるボタンタップの排他制御を設計上の仕様として理解する
UIKitにおいては、UIButtonの同時押しを防ぐためのisExclusiveTouch
プロパティが存在します。
このプロパティは、ユーザーが意図しない複数のボタンを同時に押すことを防ぎ、アプリケーションの動作をより直感的かつ安定させる役割を果たしています。しかし、SwiftUIにはこのプロパティに相当する機能が欠如しているため、一見するとSwiftUIの機能が不足しているように思えます。
しかし、実際にはこれは設計上の意図と解釈することが可能であり、その背景には新たなインターフェースデザインの哲学が存在します。
この考え方を深めるための重要な手がかりとして、WWDC18で行われた「Designing Fluid Interfaces」というセッション[1]があります。 このセッションでは、iPhoneのスクリーンが持つ即時応答性をソフトウェアで最大限に活用するための知見が提供されています。
特に、セッションの9分のところでは、並列のジェスチャーに関する言及があり、アプリ起動中にユーザーがキャンセルや操作を行ったり、ページ移動を可能にすることが強調されています。
このことは、ユーザーインターフェースが常にフィードバックを提供すべきであるという理念を反映していて、アプリケーションの使いやすさを向上させるための重要な要素であると理解することができます。
SwiftUIでは、disabled
モディファイアを使用することでボタンをグレーアウトし、視覚的にタップできない状態をユーザーに伝えることができます。これにより、ユーザーは現在の操作が無効であることを理解し、誤った操作を避けることができます。
しかし、同時押しの状況では、ユーザーは視覚的には押せるボタンをタップしているため、どちらのボタンもフィードバックを提供する必要があると考えられます。このような状況において、ユーザーは自分の行動に対する即時の反応を期待するため、インターフェースの設計はその期待に応えるものであるべきです。
では、同時押しのアクションが両方とも実行されるべきかというと、それはNOです。
ユーザーの行動に対する即時のフィードバックと、キャンセルや失敗の可能性を伴うアクションの実行は明確に区別されるべきです。
つまり、同時押しの際にはフィードバックを提供しつつも、違和感のない範囲で優先度の低いアクションはキャンセルまたは失敗させることが、流動的なインターフェースの時代における同時タップの禁止処理として位置づけられるのではないでしょうか。
このように、ユーザー体験を重視した設計が求められる現代において、SwiftUIのアプローチはその一環として理解されるべきであり、これによりアプリケーションの操作性と直感性が向上し、最終的にはユーザーの満足度を高める結果につながると考えられます。
この設計哲学は、単に機能を提供するだけでなく、ユーザーとのインタラクションをより豊かにし、アプリケーション全体の体験を向上させるための重要な要素です。
SwiftUIの特性を理解し、それを最大限に活かすことで、より良いユーザー体験を提供することが可能になるのではないかと思います。
-
時期的にも、isExclusiveTouchの時代を脱却した瞬間と捉えられる ↩︎
Discussion