UIView непрозрачная собственность

opaque свойство UIView по умолчанию всегда имеет значение "YES". Но ссылка на класс UIView гласит:

Ожидается, что непрозрачное представление заполнит свои границы полностью непрозрачным содержимым, то есть содержимое должно иметь альфа-значение 1,0. Если представление непрозрачно и либо не заполняет свои границы, либо содержит полностью или частично прозрачное содержимое, результаты непредсказуемы.

С изменением alpha вида является довольно распространенным, особенно во время переходов или анимации, тогда приведенное выше утверждение подразумевает, что вы всегда должны устанавливать вручную opaque в NO если вы собираетесь изменить alpha собственность также.

Но я никогда не настраивал вручную opaque и не было никаких заметных симптомов. Насколько необходимо сделать это рассмотрение?

2 ответа

Решение

Ответ в том, что iOS достаточно умен, чтобы признать, что если ваш взгляд alpha меньше 1, он должен рисовать контент позади вашего представления, независимо от вашего представления opaque имущество.

В ответ на комментарии: из моих ограниченных экспериментов, я не думаю, что мнение opaque собственность имеет какое-либо влияние. (Я думаю, что документация неверна.) Слой вида opaque свойство имеет эффект: оно контролирует, CGContext перешел к drawRect: имеет альфа-канал. Если слой opaque свойство YES, контекст не имеет альфа-канала (и обрабатывается так, как будто каждый пиксель имеет альфа-канал 1,0).

Изменение вида opaque свойство не влияет на слой opaque имущество. Это отличается от (например) представления alpha свойство, которое является просто оболочкой для слоя opacity имущество.

Теоретически, документально opaque Свойство позволяет им оптимизировать рисование, Apple может реализовать эту оптимизацию в будущем. На практике это может привести к поломке многих приложений, поэтому они, вероятно, не сделают такое изменение применимым к приложениям, связанным с более старыми SDK. (У них есть возможность заставить UIKit вести себя по-разному в зависимости от того, с какой версией было связано приложение.)

Пока у самого содержимого представления (а не его подпредставлений) нет альфы, у вас все в порядке. Так что, если вы инициируете UIImageViews с изображением PNG с альфа, opaque будет установлен в NO автоматически.

Обычно вам не нужно много непрозрачных видов. Но альфа полного представления в любом случае иная.

Другие вопросы по тегам