質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

672閲覧

UIPanGestureをコードから呼び出したい

popai306

総合スコア157

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

0クリップ

投稿2021/01/05 10:06

編集2021/01/05 15:27

相談内容

指で実際にViewをドラッグするのと同じ動作を、あるボタンをタップしたタイミングで実現したいです。
ユースケースとしてはアプリのチュートリアルで使いたいです。

以下のGIFのような動きをソースコードで実現したい、ということです。
GIF

今の状況

あるViewにUIPanGestureRecognizerをaddしていて、すでに指でスワイプしてそのViewを動かすことはできています。

試した方法

UIPanGestureRecognizerのactionに紐づけているメソッドpanGestureRecognizedをボタンタップ時に呼び出しているのですが、
そのメソッド内でgestureRecognizerstatedefaultに落ちてしまうので正常に処理できません。
なにかいい方法はないでしょうか?

@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:)の処理はここに落ちるので何もおきない } }
tsuki01👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/01/05 10:33

何をしたいのか分かりませんが、panGestureRecognized の switch 文の各 case に書いてある実際の処理をメソッド化して、gesture recognizer を介さずに直接呼べば良いのでは。
guest

回答1

0

やりたいことをGIFで見ました。
UIPanGestureを利用する理由がよくわかりません。
普通にアニメーションで実現できますよー

投稿2021/03/05 16:33

errolizer

総合スコア443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問