2009-11-17 70 views
0

Louis - 感謝您的輸入。這是我所做的,以及我目前的問題,我不明白。iPhone圖層管理 - 最佳實踐

菜單(2)是響應觸摸的UIImageView。每個人都是自己的班級。你稱之爲「精靈」也會對觸摸做出反應。

在.m中,我將菜單和圖片添加到圖層,通過以下代碼創建了兩個容器圖層:menuContainer = [CALayer圖層]。

我使用spriteContainer上方的menuContainer對它們進行了排序。現在,精靈在菜單下方移動 - 非常棒!但在這個過程中,精靈停止響應觸摸(我可以理解,因爲它們在menuContainer層下面),並且菜單也停止響應觸摸(不明白)。繼續混淆這種情況,添加到menuContainer中的圖層通過彈出滑塊來響應多點觸控手勢,但仍會讀取多點觸控並彈出滑塊,但我無法滑動滑塊。這使我徹底混淆了。

謝謝。

我的應用程序正在建立一個背景圖層,然後建立一些應該始終位於頂部的菜單圖層。在此之後,我添加了許多移動圖層,並很快移除了許多移動圖層。

我的問題是我想我的菜單圖層(有4個)總是在其他圖層的前面。我曾想過構建一個圖層層次結構,並使用insertsublayer:atindex:方法,使菜單的名義索引爲1000,並將大量移動圖層插入較低索引處(如200)。如果我在200處插入一個圖層,然後接下來是200,分配給200的第一層是否會移位(到201)還是會被吹走?

我已經嘗試插入圖層與插入:下面:,但是這並沒有給我想要的結果。

感謝您的幫助。

+1

這是一個很好的問題。我也想知道爲什麼蘋果公司不僅僅以Z座標屬性的形式包含Z排序機制。 – Amagrammer

+1

假設你正在討論CoreAnimation-Layers,你會發現實際上有一個zPosition屬性,另外還有一個可自由調整的CATransform3D。但是,這些屬性都只考慮到了兄弟姐妹。因此,如果您需要完整的3D對象/動畫,CoreAnimation不可用。插入的次序是計算哪個圖層在另一個圖層上繪製的。 – Till

+0

實際上,如果您在CATransformLayer中放置了一堆圖層,則可以複製一些非常複雜的3-D效果。唯一真正的限制,3-D明智的是,CALayers必須是矩形的。 –

回答

2

你不能這樣做,圖層索引不是一個z順序,它是一個數組索引。從documentation

該值不能大於在 所述子層的數組元素的計數時 。

我認爲你會得到最好的服務,但實際上是製作一個真正的圖層層次結構,而不是試圖將所有活動圖層合併到一個超級圖層中。在其他的,但是你的所有媒體到一個容器層,然後插入到你想要的根層。同樣,將所有精靈插入到一個容器圖層中,然後將其放入所需的根目錄層。

根據您的編輯附加的東西:

層是一個基本的圖形結構,它們不直接響應事件。你或者需要通過編寫代碼來自己處理它們,或者你需要使用UIViews來代替圖層。您之前可能已經開始使用它了,因爲您是在以視圖層次結構和圖層層次結構一致的方式操縱圖層,但從原始問題中我不清楚您是使用視圖而不是純粹基於圖層建立。

+0

Louis,我從文檔中的評論中想到了同樣的事情,但是根據圖層幾何圖形和在doc站點上轉換頁面:「zPosition屬性指定圖層位置的z軸分量.zPosition旨在成爲用於設置圖層相對於其兄弟圖層的視覺位置,不應該用於指定圖層兄弟的順序,而是重新排列子圖層中的圖層的順序。「這對我來說建議圖層索引*是* z-次序。我已經寫了一些代碼來證實這一點,而且似乎是這樣。 –

+0

我想我並不完全清楚。索引絕對決定什麼顯示什麼,所以在某種意義上它是一個z-順序。但它不是一個通用的z順序,因爲您不能將它們設置爲任意值,並期望它們基於此順序一致排列,因此插入其他圖層時各個圖層的索引將發生更改。 –

-1

Louis - 感謝您的輸入。這是我所做的,以及我目前的問題,我不明白。

菜單(2)是響應觸摸的UIImageView。每個人都是自己的班級。 你稱之爲「精靈」也會對觸摸做出反應。

在.m中,我將菜單和圖片添加到圖層,通過以下代碼創建了兩個容器圖層:menuContainer = [CALayer圖層]。

我使用spriteContainer上方的menuContainer對它們進行了排序。現在,精靈在菜單下方移動 - 非常棒!但在這個過程中,精靈停止響應觸摸(我可以理解,因爲它們在menuContainer層下面),並且菜單也停止響應觸摸(不明白)。繼續混淆這種情況,添加到menuContainer中的圖層通過彈出滑塊來響應多點觸控手勢,但仍會讀取多點觸控並彈出滑塊,但我無法滑動滑塊。這使我徹底混淆了。

謝謝。

+0

這不是一個真正的答案;它應該是你的問題的編輯。 –