Подтвердить что ты не робот

CALayer должен распространяться на все подслои?

Если я устанавливаю shouldRasterize = YES на CALayer, должен ли я также устанавливать его на каждом из подслоев, если бы я хотел, чтобы вся иерархия была сглажена для лучшей производительности анимации?

Я спрашиваю, потому что, когда я устанавливаю shouldRasterize = YES на свой корневой слой и включаю "Color Blended Layers" в "Инструменты", все подслои все еще существуют и помечены как смешанные. Это не сглаживает ничего.

4b9b3361

Ответ 1

Настройка shouldRasterize не делает то, о чем вы думаете. Чтобы сформировать внешний вид родительского представления, растрированный или нет, он должен проверить subviews, чтобы увидеть, являются ли они opaque или прозрачными. Когда дочерние объекты opaque, их не нужно смешивать. Когда они прозрачны, представление необходимо смешивать с тем, что стоит за ними (или выше в иерархии).

Итак, shouldRasterize не повлияет на зеленый/красный цвет, который вы видите с помощью инструментов. Чтобы все было зеленым, вам не нужно использовать прозрачность и иметь все дочерние объекты opaque. Иногда его неизбежно иметь красные области в зависимости от вашего дизайна. Инструмент находится там, чтобы помочь вам оптимизировать те, которые могут быть opaque, и уменьшить количество смешивания графического процессора.

Изменить: Чтобы объяснить далее, предположим, что у вас есть UILabel и его сидение поверх фотографии. Вы хотите видеть только текст, а не цвет фона, поэтому установите backgroundColor для очистки, а свойство opaque - НЕТ. В инструментах это теперь будет красным. Графический процессор должен сочетать эту прозрачность с изображением, расположенным за ним, выполняя две операции рисования вместо одного.

Если бы мы установили opaque в YES и дали ему сплошной цвет фона, представление теперь будет отображаться зеленым в инструментах, потому что ему не нужно смешивать этот вид с любым другим видом.

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