2011-01-27 70 views
2

我有一系列隨機放置在屏幕上的圖層。隨着每個圖層的添加,它被定位在所有其他圖層之上。如何確定CALayer是否完全被其他CALayer覆蓋?

最終,一層完全被其他層覆蓋。此時,我想從內存中移除該圖層。

有什麼方法可以知道圖層何時被其他圖層覆蓋(100%或某個分數)?

每個圖層都有一個旋轉變換應用於它,所以我無法準確地在所有圖層的框架之間進行比較。

回答

3

你可以做一個像素測試找出。根據屏幕大小初始化一個灰度上下文(如果可能的話,它只需要1位,但我不知道iOS實際上是否支持該配置)。用黑色填充區域。用白色填充圖層覆蓋的區域(可以採用圖層的變換,將其設置爲CTM,然後填充圖層的矩形)。然後遍歷所有其他圖層並做同樣的事情,除了再次填充黑色。一旦完成,您可以掃描上下文中的所有像素,查看是否有任何像素是白色的。如果您發現白色像素,圖層仍然可見。否則,它不是。

當然,這是假定你的所有圖層都是完全不透明的並且填滿它們的整個邊界。

+0

謝謝凱文 - 我開始按照你的答案來實現一些東西,但發現計算太貴了(慢)。謝謝。 – TomH

+0

你可以定期做。說,每10個新的層次,通過。如果您使用8位灰度上下文,則可以編碼更多信息,例如從下往上開始,每一個新圖層繪製一個稍微更白的值。這樣,您可以一次從底部修剪多個圖層。 –

+0

ahhh - 非常酷。我會再看看它。謝謝。 – TomH