2010-12-11 13 views
1

ジグソーパズルと比較できるゲームを開発しています。複数のゲームタイルが表面上でお互いにマッチするようになっています(後でmainViewと呼ばれます)。ゲームの開始時に、タイルはIdleViewのMainViewの下に置かれます。私はパンのジェスチャーでタイルを動かします。タップジェスチャーを使ってタイルを選択し、最後に回転ジェスチャーでタイルを回転できるようにする必要があります。これは私が解決することができたいくつかの問題を引き起こしましたが、私はUIScrollViewにタイルを配置しなければならなかったので、一度にそれらをすべて表示できるようにする必要があります。複数のUIGestureRecognizerとUIScrollViewで競合が発生する

私はいくつかの異なる実装を行いましたが、それらはすべていくつかの問題を引き起こしました。病気は、私が試したさまざまなアプローチを通って行く。

アプローチ1.パン、タップ - >タイル、回し - > MAINVIEW

まずタイルを実行するために小型にしているので、私は私のメインビューでゲームタイルと回転ジェスチャでタップとパン認識器を置きます回転ジェスチャーをしたときに偶然他のタイルを押したときに矛盾が発生し、そのタイルがパンジェスチャーとして解釈されました。これは私が新しいアプローチを試みたことにつながります。

アプローチ2.パン、タップ、回し - > MAINVIEW

私の第二のアプローチは、MAINVIEW内のすべてのジェスチャー認識装置を置くことでした。ジェスチャーが認識されるたびに、CGRectContainsPoint([gameTile frame]、gesturePoint)を呼び出してタップとパンのジェスチャーの位置にタイルがあるかどうかを確認します。

次に、回転ジェスチャーの前に、タイルが選択されているかどうかを確認してから、対応するメソッドを呼び出します。これは素晴らしい仕事でした!しかし、その後私は、画面全体に表示できるタイルを増やすためのメカニズムを持たなければならないことに気付きました。そこで私はUIScrollViewを追加して、水平にタイルを配置してすべてにアクセスできるようにしました。私は下に少し描いた。

--------------------- 
|     | 
|     | 
|     | 
| Height 370 p | 
|     | 
|  MainView  | 
|     | 
|     | 
|     | 
|     | 
|     | 
|     | 
--------------------- 
|  Height 110 p | 
|  IdleView  | 
|  UIScrollView | 
|     | 
|     | 
--------------------- 

次に、GameTilesをスクロールビューにサブビューとして追加して、ビューとともにスクロールしました。その後、彼らは私のMainViewのサブビューではなかったので、もはや私のタッチに耳を傾けませんでした。だから、私はもう何をすべきか分からなくなっている。アプローチ1に戻り、UIScrollViewのcanCancelContentTouches = NOを設定すると、タイルを移動できます。しかし、私は再び回転ジェスチャーに問題があり、いくつかの衝突検出をして、スクロールビューからメインビューにタイルを移動できるようにしなければなりません。

私はこの問題について多くの異なる投稿を読んでいますが、私はまだそれを理解できませんでした。

誰かが別の方法でポインタを渡すことができますし、UIScrollViewを使用して私のタッチを混乱させないようにすることができ、それらにジェスチャ認識機能を使用できるように合理的なサイズを持たせることができます。または、UIScrollViewからMainViewにスムーズにタイルを移動し、他のタイルをパンしなくてもタイルを回転させることができます。

答えて

1

私はあなたの質問に正確な答えを持っていないが、これらのヒントが役立つかもしれない:

  1. ジェスチャーイベントは常に最も深くネストされたビュー

  2. に流れ、あなたがGestureRecognizerをサブクラス化することができます条件付きでイベントを無視して競合を解決するには、メソッド "ignoreTouch:forEvent:"をオーバーライドします。

I recently learned this stuff by watching the Apple WWDC videos referenced in this answer.

話は、移動スケールと回転させることができ、複数のオブジェクトを備え - (あなたの最初の試み のように回転が起こっている間、あなたはタップを無視する場合があります)。

Apple example code for same

関連する問題