2011-01-27 2 views
2

У меня есть серия слоев, которые случайно помещаются на экран. По мере добавления каждого слоя он помещается поверх всех остальных.Как определить, полностью ли покрыт CALayer другими CALayers?

В конце концов, слой полностью покрыт другими слоями. На этом этапе я хочу удалить слой из памяти.

Есть ли способ узнать, когда слой покрыт (или 100% или некоторая доля) другими слоями?

Каждый слой имеет преобразование вращения, применяемое к нему, поэтому я не могу точно сравнивать между всеми кадрами слоев.

ответ

3

Вы можете сделать пиксельный тест, чтобы узнать. Инициируйте оттенок серого размером вашего экрана (если возможно, он должен быть только 1 бит, хотя я не знаю, поддерживает ли iOS эту конфигурацию). Заполните область черным. Заполните область, на которой покрыты слои белым (вы можете принять преобразование слоя, установить его как CTM, а затем заполнить прямоугольник для вашего слоя). Затем перебирайте все остальные слои и делайте то же самое, кроме повторного заполнения черным. Как только это будет сделано, вы можете сканировать все пиксели в контексте, глядя, есть ли какой-либо из них белый. Если вы найдете белый пиксель, слой все еще будет виден. В противном случае это не так.

Естественно, это предполагает, что все ваши слои полностью непрозрачны и заполняют все их границы.

+0

Thanks Kevin - Я начал реализовывать что-то в соответствии с вашими ответами, но обнаружил, что вычисление стало слишком дорогостоящим (медленным). Благодарю. – TomH

+0

Вы можете делать это периодически. Скажем, каждые 10 новых слоев делают проход. Если вы используете 8-битный оттенок серого, вы можете кодировать намного больше информации, например. начинайте снизу вверх, рисуя каждый новый слой со слегка более белым значением. Таким образом вы можете обрезать сразу несколько слоев снизу. –

+0

ahhh - очень круто. Я еще раз посмотрю на это. Благодарю. – TomH

Смежные вопросы