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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

957閲覧

ピンチジェスチャーで拡大するときに、画像の中心が拡大される。

moaikuntvs

総合スコア23

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2018/12/25 02:19

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本とも認識しているかどうかの判断する方法が分かりません。
何か方法があればご教授ください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問に対する回答になっていないかもしれませんが、

sender.location(in: myview)

で二本の指の中央の座標が返ってきませんか?

なお、認識している指の本数はnumberOfTouchesプロパティで取れると思われます。

投稿2018/12/25 04:27

編集2018/12/25 04:28
takabosoft

総合スコア8356

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

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

moaikuntvs

2018/12/25 08:12

できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問