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

UIView непрозрачное свойство

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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