iOS контролирует альфа-поведение UIView для подпредставлений - PullRequest
24 голосов
/ 21 декабря 2011

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

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

results

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

enter image description here

Ответы [ 3 ]

20 голосов
/ 12 сентября 2012

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

redContainerView.layer.shouldRasterize = YES;
// No setting rasterizationScale, will cause blurry images on retina.
redContainerView.layer.rasterizationScale = [[UIScreen mainScreen] scale];
14 голосов
/ 28 августа 2014

Альфа-свойство 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]];
12 голосов
/ 21 декабря 2011

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

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

Info.plist UIKit Keys

...