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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Xcode

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

Swift

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

Q&A

解決済

2回答

883閲覧

Pan Gesture Recognizerを使ってビューをドラッグできない。

wesker.alice

総合スコア45

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/06/03 08:18

編集2020/06/03 08:26

前提・実現したいこと

イメージ説明
前提
書籍「詳細!Swift iPhoneアプリ開発入門ノート: iOS 12+Xcode 10対応」を読みながら学んでいる初学者です。P442でビューをドラッグする という節を学んでいます。
Pan Gesture Recognizerを使ってドラッグの操作を読み取り、操作に合わせてビューを追従させると言う処理を行いたいです。
①Image Viewで画像を設置し、その画像のイメージビューにPan Gesture Recognizerをドロップ。
②Pan Gesture RecognizerをAction接続、
③アクション接続したコードの中に画像をドラッグするコードを記述
書籍には「tomobo」と書かれていましたがサンプルの画像はtomboだったため、tomboで記述しています。

実現したいこと
画像をドラッグして動かしたい。

発生している問題・エラーメッセージ

書籍の通りに記述していますが、どうしてもシミュレータで画像が動きません。
画像は表示されるのですが、ドラッグしようにも反応しないといった感じです。

該当のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBAction func dragging(_ sender: UIPanGestureRecognizer) { 6 //トンボをドラッグするコードを書く 7 let tombo = sender.view! 8 //指の座標に合わせる 9 tombo.center = sender.location(in: self.view) 10 } 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 // Do any additional setup after loading the view. 15 } 16}

試したこと

書籍のサンプルコードを起動してみたところ、画像がきちんと動きました。
なのでコードをコピーしてActionを再接続してシミュレータ を再度起動してみました。
しかし、動きませんでした。
そこで私が記述したコードをサンプルプロジェクトにコピペしてアクション接続を再接続しなおしてシミュレータで実行してみました。するとサンプルプロジェクトではちゃんと動きます。
なので、コードの記述自体が間違っているわけではなさそうなので、別に原因がありそうです。
何卒よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

マシンの環境
macOS Catalina Version 10.15.3
Xcode Version 11.4
Swift version 5.1.3

書籍のバージョン
Xcode Version 10
Swift version 4.2

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

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

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

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

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

guest

回答2

0

UIImageView をタップやドラッグに反応させるには User Interaction Enabled を有効にする必要があるのですが、Storyboard でチェックしてもなぜか有効にならない場合があるようなので、@IBOutlet に接続してコードから有効にする必要があるようです。

diff

1 class ViewController: UIViewController { 2 3 // Image View をここに接続。 4+ @IBOutlet weak var tomobo: UIImageView! 5 6 // @IBAction func dragging はそのまま。 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view. 11 12 // Image View の User Interaction を有効にする。 13+ tomobo.isUserInteractionEnabled = true 14 } 15 }

投稿2020/06/03 09:10

hoshi-takanori

総合スコア7899

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

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

wesker.alice

2020/06/03 09:12

ご回答ありがとうございます。 今回はUser Interaction Enabledで動くようになりました。 今後チェックを入れても動かないことがあれば試してみようと思います。
guest

0

ベストアンサー

ImageView側で、タッチが許可されていないってことはないでしょうか。

ImageViewのインスペクターを表示し、添付画像内の赤枠の所にチェックが入っているかご確認ください。
※チェックが入っていないと、タッチが無効になってしまいます。
Xcode

投稿2020/06/03 08:33

編集2020/06/03 08:37
tsuki01

総合スコア1751

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

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

wesker.alice

2020/06/03 08:40

ご回答ありがとうございます。 チェックが外れていました。 チェックをつけてシミュレータを起動したところ、動くようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問