2011-01-27 47 views
2

我有一系列随机放置在屏幕上的图层。随着每个图层的添加,它被定位在所有其他图层之上。如何确定CALayer是否完全被其他CALayer覆盖?

最终,一层完全被其他层覆盖。此时,我想从内存中移除该图层。

有什么方法可以知道图层何时被其他图层覆盖(100%或某个分数)?

每个图层都有一个旋转变换应用于它,所以我无法准确地在所有图层的框架之间进行比较。

回答

3

你可以做一个像素测试找出。根据屏幕大小初始化一个灰度上下文(如果可能的话,它只需要1位,但我不知道iOS实际上是否支持该配置)。用黑色填充区域。用白色填充图层覆盖的区域(可以采用图层的变换,将其设置为CTM,然后填充图层的矩形)。然后遍历所有其他图层并做同样的事情,除了再次填充黑色。一旦完成,您可以扫描上下文中的所有像素,查看是否有任何像素是白色的。如果您发现白色像素,图层仍然可见。否则,它不是。

当然,这是假定你的所有图层都是完全不透明的并且填满它们的整个边界。

+0

谢谢凯文 - 我开始按照你的答案来实现一些东西,但发现计算太贵了(慢)。谢谢。 – TomH

+0

你可以定期做。说,每10个新的层次,通过。如果您使用8位灰度上下文,则可以编码更多信息,例如从下往上开始,每一个新图层绘制一个稍微更白的值。这样,您可以一次从底部修剪多个图层。 –

+0

ahhh - 非常酷。我会再看看它。谢谢。 – TomH