質問: 現在フリーハンドお絵描きをするために TouchesBegan TouchesMoved TouchesEnded を使用しています。 ここでピンチイン/ピンチアウト操作で全体の拡縮機能を入れたいと思っています。 UIPinchGestureRecognizerというクラスを使い、拡縮することができたのですが、 この時にピンチイン・アウト操作と一緒にフリーハンド描画もされてしまいます。 ピンチイン・アウト操作をしている間はフリーハンド描画はさせたくありません。 Q1. TouchesXXXメソッドとUIPinchGestureRecognizerでジェスチャーを判定する方法はありますか? Q2. そもそもピンチイン/ピンチアウト操作をUIPinchGestureRecognizerではなくTouches***メソッドで書けないのでしょうか? ◆環境 Visual Studio 2017 Xamarin 4.12 Xamarin.iOS 12.2
回答: 自分もお絵かきアプリは何度か作っていますが(Xamarinは未使用)、 UIPinchGestureRecognizerが発動したら、フリーハンドで描いた内容をキャンセルする(≒アンドゥする)というような方向性で実装した事があります(実際は少し違いますが、考え方としては)。 これならば、フリーハンドのレスポンスは今までどおりで、ピンチ操作も競合せずに入れこめるのではないかと思います。 > > Q1. TouchesXXXメソッドとUIPinchGestureRecognizerでジェスチャーを判定する方法はありますか? > > > ちょっと質問の意図と違う事を言うかもしれませんが、 ジェスチャ側のstateプロパティを見ればジェスチャが始まったタイミングや終わったタイミングが解りますので、ここを見てフリーハンド側を制御すると良いと思います。 (case canncelledも忘れずに) > > Q2. そもそもピンチイン/ピンチアウト操作をUIPinchGestureRecognizerではなくTouches***メソッドで書けないのでしょうか? > > > Viewをマルチタッチ対応にしておいてピンチ操作を自分で検出するという事も可能といえば可能です。 ただ、フリーハンドとの競合の問題はどのみち出ますので、それをどうするかを先に仕様として決める必要があります)