swift4でピンチジェスチャーを使ってViewに表示した画像を拡大するときに、2本指の中心でなく、viewの中心を基準に拡大されてしまいます。
swift
1func pinchAction(sender: UIPinchGestureRecognizer) { 2 3 4 // ピンチ中の拡大率は0.3〜2.5倍、指を離した時の拡大率は0.5〜2.0倍とする 5 switch sender.state { 6 case .began, .changed: 7 8 // senderのscaleは、指を動かしていない状態が1.0となる 9 // 現在の拡大率に、(scaleから1を引いたもの) / 10(補正率)を加算する 10 currentScale = currentScale + (sender.scale - 1) / 10 11 // 拡大率が基準から外れる場合は、補正する 12 if currentScale < 1 { 13 currentScale = 1 14 } else if currentScale > 5 { 15 currentScale = 5 16 } 17 // 計算後の拡大率で、imageViewを拡大縮小する 18 myview.transform = CGAffineTransform(scaleX: currentScale, y: currentScale) 19 default: 20 // ピンチ中と同様だが、拡大率の範囲が異なる 21 if currentScale < 0.5 { 22 currentScale = 0.5 23 } else if currentScale > 5.0 { 24 currentScale = 5.0 25 } 26 27 // 拡大率が基準から外れている場合、指を離したときにアニメーションで拡大率を補正する 28 print(self.currentScale) 29 // 例えば指を離す前に拡大率が0.3だった場合、0.2秒かけて拡大率が0.5に変化する 30 UIView.animate(withDuration: 0.2, animations: { 31 self.myview.transform = CGAffineTransform(scaleX: self.currentScale, y: self.currentScale) 32 }, completion: nil) 33 34 } 35 }
そこで、以下のコードを追加し、2本の指の座標を取得しようとしたのですが、1本の指しか認識しなかった場合エラーが出ていました。
swift
1let touchPoint1 = sender.location(ofTouch: 0, in: myview) 2let touchPoint2 = sender.location(ofTouch: 1, in: myview) 3 4Terminating app due to uncaught exception 'NSRangeException', reason: '-[UIPinchGestureRecognizer locationOfTouch:inView:]: index (1) beyond bounds (1).'
なので、2本の指が認識されているときのみ、それぞれの指の座標を取得をしたいと思うのですが、その際、指を2本とも認識しているかどうかの判断する方法が分かりません。
何か方法があればご教授ください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/25 08:12