Производительность UIView: непрозрачная, backgroundColor, cleararsContextBeforeDrawing?

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

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

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

Библиотека разработчиков iOS: UIView Ссылка на класс

  • Ссылка на класс UIView: backgroundColor говорит: "[ nil] приводит к прозрачному цвету фона". Если я установил UIView opaque свойство на YES, должен также установить его backgroundColor на [UIColor clearColor], или что лишняя строка кода и обработка ненужны? I.e., [UIColor clearColor] считается непрозрачным (непрозрачным)?

  • Значит ли значение clearsContextBeforeDrawing для непрозрачных представлений?

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

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

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

    Что это?

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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