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

IOS контролирует поведение UIView альфа для подпунктов

В моем примере у меня есть 3 вида: один красный вид, содержащий два белых изображения. Я изменяю альфа-представление красного контейнера до 0,3, и это происходит (посмотрите на изображение, текущий результат).

Увидев это, я могу только предположить (скажите, если я ошибаюсь), что установка альфа-представления также установит все его альфа-объекты subviews. Мой вопрос: есть способ просто сказать красное представление действовать как целое, так что установка его альфы даст что-то похожее на желаемый результат (на изображении)?

results

Вот как это выглядит без альфы:

enter image description here

4b9b3361

Ответ 1

Проверьте возможные ключи UIKit для Info.plist, в частности UIViewGroupOpacity.

UIViewGroupOpacity (Boolean - iOS) указывает, будет ли Core Animation подслои наследуют непрозрачность своего суперслоя.

Info.plist UIKit Keys

Ответ 2

Чтобы уточнить ответ Марка: если вы установите UIViewGroupOpacity в Info.plist, это изменит поведение для всех просмотров в вашем приложении, если вы заинтересованы только в фиксации рендеринга этого конкретного вида, вы также можете используйте этот фрагмент:

redContainerView.layer.shouldRasterize = YES;
// No setting rasterizationScale, will cause blurry images on retina.
redContainerView.layer.rasterizationScale = [[UIScreen mainScreen] scale];

Ответ 3

Альфа-свойство iOS наследуется его подпредставлениями. Если мы установим альфа 0.3 для красного вида, то оба подпредставления будут иметь альфа = 0.3. Нет способа остановить подпредставление, чтобы наследовать альфа-значение от его суперпредставления.

Решением может быть установка цвета красного вида с альфа-значением 0,3. Свойство color не будет зависеть от его подпредставления.

[redView setBackgroundColor:[UIColor colorWithHue:238.0f/255.0f saturation:24.0f/255.0f brightness:24.0f/255.0f alpha:0.3]];