Производительность UIView: непрозрачный, backgroundColor, clearsContextBeforeDrawing? - PullRequest
10 голосов
/ 05 ноября 2011

Я отображаю непрозрачные PNG с UIImageView s внутри суперпредставления с белым фоновым цветом. Что лучше для производительности?

UIImageView По умолчанию

opaque = NO, backgroundColor = nil, clearsContextBeforeDrawing = YES.

Библиотека для разработчиков iOS: UIView Справочник по классам

  1. Описание класса UIView: backgroundColor говорит: «[nil] приводит к прозрачному цвету фона». Если я установлю UIView s opaque свойство на YES, должен ли я также установить его backgroundColor на [UIColor clearColor], или эта дополнительная строка кода и обработки не нужны? То есть [UIColor clearColor] считается непрозрачным (не прозрачным)?

  2. Имеет ли значение clearsContextBeforeDrawing значение для непрозрачных видов?

    Комментарии для clearsContextBeforeDrawing в UIView.h говорят, что он игнорируется для непрозрачных представлений.

    Но, Ссылка на класс UIView: clearsContextBeforeDrawing говорит:

    Если свойство представления opaque также установлено на YES, свойство backgroundColor вид не должен быть nil, иначе могут возникнуть ошибки при рисовании.

    Что это?

Похожие вопросы

Ответы [ 2 ]

7 голосов
/ 19 ноября 2011

Предполагая, что ваши PNG всегда заполняют все UIImageView, вы должны получить максимальную производительность, используя:

opaque = YES, clearsContextBeforeDrawing = NO. В этом режиме backgroundColor не имеет значения. Пиксели просто заменяются новыми данными изображения.

Для прозрачных изображений PNG на одноцветном фоне самый быстрый будет:

opaque = YES, clearsContextBeforeDrawing = YES и backgroundColor, соответствующие тому, что вам нужно. В этом случае [UIColor whiteColor].

3 голосов
/ 19 ноября 2011

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

Я не думаю, что вы хотите изменить значения по умолчанию для вашего изображения, но вы должны убедиться, что ваши PNG не имеют прозрачности (то есть, не имеют альфа-канала; вы можете проверить это в Инспекторе изображений Preview; убедитесь, что это не говорит «Имеет альфа».). Я верю, что UIImageView сделает правильную вещь, если вы дадите ему непрозрачное изображение.

В зависимости от того, что находится на заднем плане, производительность может быть выше при использовании opaque = YES и белого фона для ваших изображений (во избежание перерисовки частей родительского представления), но я бы не стал так начинать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...