0

ルイ-ご意見ありがとうございます。これが私がしたことと、私が理解していない現在の問題です。

メニュー(2)は、タッチに応答するUIImageViewです。それぞれが独自のクラスです。あなたがそれらを呼んだ「スプライト」もタッチに反応します。

メニューとスプライトをレイヤーに追加する.mで、次のコードを使用して2つのコンテナーレイヤーを作成しました:menuContainer =[CALayerlayer]。

spriteContainerの上にあるmenuContainerで注文しました。さて、スプライトはメニューの下に移動します-素晴らしいです!しかし、その過程で、スプライトはタッチに応答しなくなり(menuContainerレイヤーの下にあるため、これは理解できます)、メニューもタッチに応答しなくなりました(取得しないでください)。状況を混乱させ続けると、スライダーをポップアップすることによってマルチタッチジェスチャに応答するmenuContainerに追加されたレイヤーは、マルチタッチを読み取り、スライダーをポップアップしますが、スライダーをスライドできません。これは私を完全に混乱させました。

ありがとう。

私のアプリは背景レイヤーを構築してから、常に一番上にあるはずのメニューレイヤーを構築しています。この後、多くの移動レイヤーを追加し、多くの移動レイヤーをすばやく削除します。

私の問題は、メニューレイヤー(4つあります)を常に他のレイヤーの前に配置したいということです。レイヤー階層を構築し、insertsublayer:atindex:メソッドを使用して、メニューを想定インデックス1000にし、200などの低いインデックスに多数の移動レイヤーを挿入することを考えました。200に1つのレイヤーを挿入してから次の200で、200に割り当てられた最初のレイヤーがシフト(201)されますか、それとも吹き飛ばされますか?

insertsublayer:below:を使用してレイヤーを挿入しようとしましたが、目的の結果が得られません。

助けてくれてありがとう。

4

2 に答える 2

2

実際にはできません。レイヤー インデックスは z オーダーではなく、配列インデックスです。ドキュメントから:

この値は、サブレイヤー配列の要素数を超えてはなりません。

私はあなたが最も役立つと思いますが、実際には、すべてのアクティブレイヤーを1つのスーパーレイヤーに押し込もうとするのではなく、レイヤーの真の階層を作成します. その他では、すべてのメニューレイヤーをコンテナレイヤーに入れ、それを必要なルートレイヤーに挿入します。同様に、すべてのスプライトを 1 つのコンテナー レイヤーに挿入し、それをルート レイヤーの必要な場所に配置します。

あなたの編集に基づく追加のもの:

レイヤーは本質的にグラフィカルな構造であり、イベントに直接応答しません。アタッチされているビューで hitTest するコードを記述して自分で処理するか、レイヤーの代わりに UIView を使用する必要があります。ビュー階層とレイヤー階層が一致するようにレイヤーを操作していたため、おそらく以前はそれを回避していましたが、元の質問から、純粋なレイヤーベースではなくビューを使用していたことが明確ではありませんでした設定。

于 2009-11-17T23:59:02.990 に答える
-1

ルイス -​​ ご意見ありがとうございます。これが私がやったことと、私が理解できない現在の問題です。

メニュー (2) は、タッチに応答する UIImageView です。それぞれが独自のクラスです。あなたがそれらを呼んだ「スプライト」もタッチに反応します。

メニューとスプライトをレイヤーに追加する .m で、次のコードを使用して 2 つのコンテナー レイヤーを作成しました: menuContainer = [CALayer layer]。

spriteContainer の上に menuContainer を付けて注文しました。これで、スプライトはメニューの下に移動します - 素晴らしいです! しかし、その過程で、スプライトがタッチに反応しなくなり (menuContainer レイヤーの下にあるので理解できます)、メニューもタッチに反応しなくなりました (わかりません)。状況を混乱させ続けて、スライダーをポップアップすることによってマルチタッチ ジェスチャに応答する menuContainer に追加されたレイヤーは、依然としてマルチタッチを読み取り、スライダーをポップアップしますが、スライダーをスライドさせることはできません。これは私を完全に混乱させました。

ありがとう。

于 2009-11-18T04:58:36.010 に答える