UIScrollViewを2本指でスクロール操作できるようにする
Table of Contents
UIScrollViewのスクロールを、1本指ではなく、2本指でスクロールできるようにする方法を紹介します。 非常にかんたんなので、一回覚えればもう忘れることはありません。
override func viewDidLoad() {
// 便宜的にここで生成
let scrollView = UIScrollView(frame: view.bounds)
scrollView.delegate = self
view.addSubview(scrollView)
// ここがキーポイント
scrollView.panGestureRecognizer.minimumNumberOfTouches = 2
}
UIPanGestureRecognizer #
UIPanGestureRecognizer
は、ドラッグ操作のイベントを補足するGestureRecognizerです。
このRecognizerは、最小のタッチ数minimumNumberOfTouch
と、最大のタッチ数maximumNumberOfTouch
を設定することができます。詳しくは、Appleのドキュメントをご覧ください。
UIPanGestureRecognizer - UIKit | Apple Developer Documentation
今回は、UIScrollViewのスクロール=ドラッグ操作を2本指にするため、scrollView.panGestureRecognizer
で取得したインスタンスに対し、minimumNumberOfTouch
を2
でセットしました。
こうすることで、1本指ではスクロールできず、2本指からスクロールできるようになります。
なお、UIScrollViewはpanGestureRecognizerを{ get }
のみ公開しています。外からセットすることはできません。
そのため、UIScrollViewから取得したUIPanGestureRecognizerのインスタンスに対して処理を書く必要があります。
PinchGestureとは競合しないか #
PinchかPanかの判別はシステムがいい感じにしてくれる(というよりは、実装者が意識しなくても良いようなAPI設計になっている)ので、ジェスチャの競合を考慮する必要はありません。
UIScrollViewのスクロールを、2本指で操作できるようにする実装を紹介しました。 UIGestureRecognizerには、今回の「Pan」以外にも「ScreenEdgePan」「Tap」「Pinch」「Rotation」「Swipe」「LongPress」といった便利なジェスチャが用意されています。 アプリのインタラクションを独自で作り込む際は、これらの各種ジェスチャを把握した上で、快適な操作を実現していきたいですね。