iOS Swift UIView で Safari のようなジェスチャーナビゲーションを実装

Safari で 左端から右へスワイプ(エッジスワイプ)するとブラウザバック(戻る)が機能します。また進むの履歴があれば右端から左へスワイプ(エッジスワイプ)するとブラウザフォワードができます。あと左右エッヂからのフリックでも速度によっては 戻る / 進む が機能します。

この機能を自前のアプリに追加したいのだが、WebView 上では webView.allowsBackForwardNavigationGestures = true を設定することで簡単に実装できます。UIViewController で実装するには UIPercentDrivenInteractiveTransition 利用すれば実装できそうです。(試してないですが)

私の場合は UIView 上で実装できないか調査して実装してみたので内容をまとめておきます。

実装をするあたり

下記のクラスを利用して実現しました。

  • UIViewPropertyAnimator
  • UIPanGestureRecognizer

まずは完成したサンプルアプリ

ソース