相談内容
指で実際にViewをドラッグするのと同じ動作を、あるボタンをタップしたタイミングで実現したいです。
ユースケースとしてはアプリのチュートリアルで使いたいです。
以下のGIFのような動きをソースコードで実現したい、ということです。
GIF
今の状況
あるViewにUIPanGestureRecognizerをaddしていて、すでに指でスワイプしてそのViewを動かすことはできています。
試した方法
UIPanGestureRecognizerのactionに紐づけているメソッドpanGestureRecognized
をボタンタップ時に呼び出しているのですが、
そのメソッド内でgestureRecognizer
のstate
がdefault
に落ちてしまうので正常に処理できません。
なにかいい方法はないでしょうか?
@objc func didTapButton() { pan(to: .init(x: 100, y: 0)) } func pan(to point: CGPoint) { let gestureRecognizer = UIPanGestureRecognizer() gestureRecognizer.setTranslation(point, in: self) self.panGestureRecognized(gestureRecognizer) } @objc func panGestureRecognized(_ gestureRecognizer: UIPanGestureRecognizer) { dragDistance = gestureRecognizer.translation(in: self) let touchLocation = gestureRecognizer.location(in: self) switch gestureRecognizer.state { case .began: // 指でのドラッグはここで正常に処理される case .changed: // 指でのドラッグはここで正常に処理される case .ended: // 指でのドラッグはここで正常に処理される default: // pan(to:)の処理はここに落ちるので何もおきない } }