Самый быстрый способ (с точки зрения производительности) затемнить UIView или CALayer

У меня есть UIView / CALayer, который я хотел бы затемнить. Как я могу как можно быстрее затемнить это? Есть ли способ избежать смешивания?

Мне известны следующие альтернативы

  • создайте непрозрачный CALayer и установите цвет фона и непрозрачность и добавьте его в качестве подслоя над основным слоем
  • так же, как и выше, используя UIView (может быть немного медленнее...?)
  • рендеринг вида / слоя в UIImage и рисование с помощью CoreGraphics (это слишком медленно, а содержимое динамично / меняется)

3 ответа

Решение

Создайте непрозрачный слой CALayer, установите цвет фона и непрозрачность и добавьте его в качестве подслоя над основным слоем.

Кто-то дал мне совет иметь темный фон на суперпредставлении / суперслое и установить альфа вида, который я хочу затемнить. Таким образом, мне не нужно добавлять дополнительный слой / вид.

Потенциальным недостатком этого является то, что представление, которое вы хотите затемнить, будет отображаться за пределами экрана, если включена прозрачность для группового просмотра (по умолчанию на iOS 7 и выше).

Я должен был сделать что-то вроде этого. Для всех, кто интересуется действительным кодом:

// assuming the view you're trying to darken is called 'mainUIView'
// make the dark layer the same size as the view you're overlaying
UIView *darkBackgroundView = [[UIView alloc] initWithFrame:mainUIView.frame];
CALayer *darkenLayer = darkBackgroundView.layer;
// background color
darkenLayer.backgroundColor = [UIColor blackColor].CGColor;
// transparency (0 is transparent, 1 is solid)
// you can adjust this for the level of darkness you prefer
darkenLayer.opacity = 0.75f;
[mainUIView addSubview:darkBackgroundView];
Другие вопросы по тегам