いつもお世話になっております。
タイトル通りなのですが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}
回答1件
あなたの回答
tips
プレビュー