UIGestureRecognizerでピンチと回転を両立させる
画面に表示されてるオブジェクトをズームした後に回転させたい時ってあるじゃない。これを実装しようとしたのよ。
UIGestureRecognizerのサブクラスに
UIPinchGestureRecognizer
UIRotationGestureRecognizer
ってのがあって、それぞれのオブジェクトを画面にaddGestureRecognizer: これでいいと思うよね。
ところがこれだとどちらか片方しか反応してくれず、例えばズームした後に一度画面から指を離して、それから回転させることになるのよ!えー?マジかよ、Appleのマップでも指を離さず拡大も回転もできるのに!
これってもしかして、自分でタッチされてる二点の位置関係を把握して拡大縮小、回転できるようにコード書かないとダメなのかな、面倒だなー、と思ったんだけど、よくよくリファレンスを確認すると
UIGestureRecognizerDelegateに
- (BOOL)gestureRecognizer:(UIGestureRecognizer * _Nonnull)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer * _Nonnull)otherGestureRecognizer
ってのがあって、ここでYESを返すと解決。
iOS 3.2以降なので新しい機能でもなんでもないけど、今まで扱ったことなかったので知りませんでしたわ。
UIGestureRecognizerのサブクラスに
UIPinchGestureRecognizer
UIRotationGestureRecognizer
ってのがあって、それぞれのオブジェクトを画面にaddGestureRecognizer: これでいいと思うよね。
ところがこれだとどちらか片方しか反応してくれず、例えばズームした後に一度画面から指を離して、それから回転させることになるのよ!えー?マジかよ、Appleのマップでも指を離さず拡大も回転もできるのに!
これってもしかして、自分でタッチされてる二点の位置関係を把握して拡大縮小、回転できるようにコード書かないとダメなのかな、面倒だなー、と思ったんだけど、よくよくリファレンスを確認すると
UIGestureRecognizerDelegateに
- (BOOL)gestureRecognizer:(UIGestureRecognizer * _Nonnull)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer * _Nonnull)otherGestureRecognizer
ってのがあって、ここでYESを返すと解決。
iOS 3.2以降なので新しい機能でもなんでもないけど、今まで扱ったことなかったので知りませんでしたわ。
スポンサーサイト