1

サーフェス上で互いに一致するいくつかのゲーム タイルがあるジグソー パズルと比較できるゲームを開発しています (後で MainView として参照されます)。ゲームの開始時に、タイルは IdleView の MainView の下に配置されます。パンジェスチャーでタイルを動かします。タップ ジェスチャを使用してタイルを選択し、最後に回転ジェスチャでタイルを回転できるようにする必要があります。これにより、解決できたいくつかの問題が発生しましたが、タイルを一度に表示するには多くのタイルが必要なため、タイルを UIScrollView に配置する必要がありました。

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

アプローチ 1. パン、タップ -> 並べて表示、回転 -> MainView

最初に、ゲーム タイルにタップとパンの認識機能を配置し、回転ジェスチャをメイン ビューに配置しました。これは、回転ジェスチャを実行するにはタイルが小さすぎるためです。そして、そのタイルはそれをパン ジェスチャとして解釈しました。これは、私が新しいアプローチを試みたことにつながります。

アプローチ 2. パン、タップ、回転 -> MainView

私の 2 番目のアプローチは、すべてのジェスチャ認識機能を MainView に配置することでした。次に、ジェスチャが認識されるたびに、タップとパンのジェスチャの場所にタイルがあるかどうかを確認します。

次に、回転ジェスチャの前に、タイルが選択されているかどうかを確認してから、対応するメソッドを呼び出します。これはうまくいきました!しかし、その後、画面全体に表示できるよりも多くのタイルを表示できるメカニズムが必要であることに気付きました。そこで、すべてにアクセスできるようにタイルを水平に配置する UIScrollView を追加しました。下にちょっと描いてみました。

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

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

この問題に関する多くのさまざまな投稿を読みましたが、まだ理解できていません。

タッチを台無しにせず、ジェスチャー認識機能を使用できるように適切なサイズにすることができる UIScrollView とは別の方法で、誰かが私にいくつかのポインターを与えることができますか? または、タイルを UIScrollView から MainView にスムーズに移動し、他のタイルをパンせずにタイルを回転させる方法。

4

1 に答える 1

1

あなたの質問に対する正確な答えはありませんが、次のヒントが役立つかもしれません。

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

  2. GestureRecognizerをサブクラス化し、メソッド「ignoreTouch:forEvent:」をオーバーライドして、条件付きでイベントを無視し、競合を解決できます。(最初の試みのように-回転が進行している間はタップを無視したいかもしれません)

私は最近、この回答で参照されているApple WWDCビデオを見て、このことを学びました。

トークでは、移動、拡大縮小、回転が可能な複数のオブジェクトを取り上げています。

同じためのAppleサンプルコード

于 2012-05-04T16:10:06.513 に答える