iOSジェスチャー戦記 – SwiftUIのジェスチャー優先度の変更とその実践的対処法 by Eiji Shirakazu

iOSDC Japan 2025
レギュラートーク(20分)

iOSジェスチャー戦記 – SwiftUIのジェスチャー優先度の変更とその実践的対処法

cychow_app Eiji Shirakazu cychow_app

ある日、ユーザーから「画面をスワイプしてもカルーセルビューが動かない」との報告が届きました。

調査の結果、Xcode 16への開発環境とiOS 18への端末のアップデートを契機に、SwiftUIのジェスチャー優先順位に仕様変更があり、親ビューであるScrollViewとその子ビューであるカルーセルビューのジェスチャーが競合し、結果としてカルーセルビュー側のDragGestureが正しく検知されなくなっていたことが判明しました。

本セッションでは、ユーザー体験に大きな影響を与えうる、SwiftUIフレームワークのジェスチャーの仕様変更によって、どのようなViewの構成で問題が発生したのかを再現しつつ、発見から解決までの過程を丁寧に解説します。さらに、今後も仕様変更に耐えられるUI設計のヒントを共有します。

  • iOS 18からSwiftUIのジェスチャー優先順位にどんな変更が加えられたのか?
  • ジェスチャー競合によって引き起こされた問題とその解決の道のり
    • ScrollView vs .highPriorityGesture() の相互作用
    • DragGesture(minimumDistance:) による競合の回避とその副作用
    • UIGestureRecognizerRepresentableによる本質的な競合解消
  • まとめ:再発を防ぐ設計と、変化に強いUIをどう作るか