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

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

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

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

Swift

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

Q&A

解決済

1回答

1157閲覧

Swift UIImageViewにセットした画像をピンチで拡大縮小する

lyzmfeqpxs54

総合スコア237

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/11/21 06:59

いつもお世話になっております。
タイトル通りなのですがUIImageViewにセットした画像をピンチで拡大縮小するようにしたいと考えております。いくつかのサイトを参考に下記のようにコーディングいるのですが、うまく動きません。

pinchActionの中にブレークポイントを設置後、画像をピンチしても反応しないのでデリゲートがうまく動いてないようには見えるのですが…。
間違っている部分をご指摘くださいますと幸いです。
よろしくおねがいします。

swift

1 2class ViewController: UIViewController,UIGestureRecognizerDelegate { 3 override func viewDidAppear(_ animated: Bool) { 4 super.viewDidAppear(animated) 5 6 // スクリーン画面のサイズを取得 7 let scWid: CGFloat = UIScreen.main.bounds.width //画面の幅 8 let scHei: CGFloat = UIScreen.main.bounds.height //画面の高さ 9 let posX = scWid*0.05 10 let titleY = scHei*0.10 11 // タイトル画像の作成 12 titleView = UIImageView(frame: CGRect(x: titleX ,y: titleY ,width: scWid - (titleX*2) ,height: (scWid - (titleX*2))*500/1600)) 13 titleView.image = UIImage(named: "top_title.png") 14 self.view.addSubview(titleView) 15 16 let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(ViewController.pinchAction(sender:))) 17 pinchGesture.delegate = self 18 titleView.addGestureRecognizer(pinchGesture) 19 } 20 21 // 画像の拡大率 22 var currentScale:CGFloat = 1.0 23 24 @objc func pinchAction(sender: UIPinchGestureRecognizer) { 25 // imageViewを拡大縮小する 26 // ピンチ中の拡大率は0.3〜2.5倍、指を離した時の拡大率は0.5〜2.0倍とする 27 switch sender.state { 28 case .began, .changed: 29 // senderのscaleは、指を動かしていない状態が1.0となる 30 // 現在の拡大率に、(scaleから1を引いたもの) / 10(補正率)を加算する 31 currentScale = currentScale + (sender.scale - 1) / 10 32 // 拡大率が基準から外れる場合は、補正する 33 if currentScale < 0.3 { 34 currentScale = 0.3 35 } else if currentScale > 2.5 { 36 currentScale = 2.5 37 } 38 // 計算後の拡大率で、imageViewを拡大縮小する 39 titleView.transform = CGAffineTransform(scaleX: currentScale, y: currentScale) 40 default: 41 // ピンチ中と同様だが、拡大率の範囲が異なる 42 if currentScale < 0.5 { 43 currentScale = 0.5 44 } else if currentScale > 2.0 { 45 currentScale = 2.0 46 } 47 48 // 拡大率が基準から外れている場合、指を離したときにアニメーションで拡大率を補正する 49 // 例えば指を離す前に拡大率が0.3だった場合、0.2秒かけて拡大率が0.5に変化する 50 UIView.animate(withDuration: 0.2, animations: { 51 self.titleView.transform = CGAffineTransform(scaleX: self.currentScale, y: self.currentScale) 52 }, completion: nil) 53 54 } 55 } 56}

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

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

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

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

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

fuzzball

2018/11/21 07:24

「pinchActionの中に‥」 ← 中のどこでしょうか?
lyzmfeqpxs54

2018/11/21 08:20

すみません。Xcodeの左部にあるブレークポイントです
fuzzball

2018/11/21 08:52

そんなこと聞いているんじゃないですよ。
guest

回答1

0

ベストアンサー

titleView.isUserInteractionEnabled = true
を付けてください。

この設定をしないとGesture系のイベントは反応せず、タッチイベントがスルーされます。

UIView や UIButton などはデフォルトで true ですが、 UIImageView はデフォルトで false のはずです。

投稿2018/11/21 07:44

norinor

総合スコア42

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

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

lyzmfeqpxs54

2018/11/21 08:24

ご回答ありがとうございます。ご教示いただいた方法で無事解決できました。以前UIButtonではできていたのでなぜだろうと思っていたのですがUIImageView はデフォルトで falseなのですね。またご教示いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問