Как определить, полностью ли покрыт CALayer другими CALayer? - PullRequest
2 голосов
/ 27 января 2011

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

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

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

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

1 Ответ

3 голосов
/ 28 января 2011

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

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

...