2013-09-08 1 views
54

В соответствии с документацией для UIVIew @property(nonatomic) CGFloat alphaУстановка альфа на UIView устанавливает альфа на его подвидов, которые не должны произойти

Значение этого свойства представляет собой число с плавающей точкой в ​​диапазоне 0,0 до 1,0, где 0,0 представляет собой полностью прозрачный и 1,0 представляет полностью непрозрачный. Это значение влияет только на текущий вид и не влияет на его встроенные вложенные объекты.

У меня есть вид контейнера выполнен следующим образом:

self.myView.backgroundColor = [UIColor blackColor]; 
self.myView.alpha = 0.5; 
[self addSubview:self.myView]; 

А затем добавить подвидов в 'MyView'

[myView addSubView anotherView]; 
anotherView.alpha = 1; 
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected 

Но 'anotherView' имеет альфа на (он не является непрозрачным, как ожидалось)

Как это быть и что можно сделать?

+0

Добавить кодекс создания anotherView :), а также я думаю, что это опечатка, но вы уверены, что инициализируете 'self.myView'? и добавьте ** anotherView **, например '[self.self addSubview: self.myView];' – iPatel

+0

Может быть, порядок добавления subviews и настройки alpha важен. Попробуйте сыграть с разными последовательностями. – Joride

+1

действительно, документация правильная: это не повлияет на встроенные subviews_its, а альфа-подпункты всегда одинаковы, но визуализированные представления имеют значение «альфа», которое является всеми значениями «alpha», и умножается. например если subviews alpha '0.8' и альфа-надстройка были' 1.0', но вы изменили ее на '0,6', альфа-подпункт все тот же,' 0,8'. отображаемое альфа-значение subview изменяется только от '0.8' до' 0.48'. – holex

ответ

91

Я думаю, что это ошибка в документации. Вы должны отправить его на bugreport.apple.com.

Все, что я вижу после нескольких быстрых исследований, показывает, что вы видите, это то, как он всегда себя вел, и мое собственное тестирование показывает это тоже.

Альфа вида применяется ко всем подзонам.

Возможно, все, что вам нужно, это [[UIColor blackColor] colorWithAlphaComponent:0.5], но если нет, вам нужно будет сделать вид брата вместо ребенка.

+16

+1. FWIW, я думаю, что документы, возможно, правильны, если они крайне неясны (с точки зрения неправильности во всех практических целях). Изменена альфа субвизоров, но не альфа-значение. Похоже, это поведение похоже на скрытое свойство. Устанавливает скрытые скрытые скрытые объекты, но не создает скрытое свойство subviews. –

+2

У меня было требование показать что-то вроде uipopover, но в iphone. Мне нужно создать uiviewcontroller с [[UIColor blackColor] colorWithAlphaComponent: 0.5] .thanks это сработало – Alok

+0

Это сработало и для меня. Благодаря! – Ladessa

29

Не устанавливайте альфа непосредственно в родительском представлении. Вместо него используйте приведенную ниже строку кода, которая будет применять прозрачность к родительскому виду, не затрагивая его дочерние представления.

[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0.5]];

+0

этот код не работает с последними ios и xcode. у кого есть разные идеи? – Moxarth

12

Если вы как раскадровки, положить User Defined Runtime Attribute на ваш взгляд, в Identity Inspector:

Key Path: backgroundColor, Type: Color, Value: например белый цвет с непрозрачностью 50%.

+1

Не работает. Это также влияет на контроль над детьми. – bashan

+0

Это работает как шарм –

+0

Отличный ответ! В Инспекторе атрибутов я устанавливаю альфа альфа в один. В Identity Inspector вставьте ключ, как указано выше, с непрозрачностью 50%. Прозрачность представления теперь составляет 50%, но непрозрачность подзапросов по-прежнему составляет 100%. Я полагаю, что альфа и непрозрачность НЕ являются одними и теми же. – etayluz

2

Вот немного сложное решение:

UIView *container; 
UIView *myView; 
UIView *anotherView; 

myView.alpha = 0.5; 
[container addSubview:myView]; 

anotherView.alpha = 1; 
[container addSubview:anotherView]; 

Используйте container вид, как надтаблицы, anotherView и myView оба подтаблицы в container, anotherView не подвид в myView.

18

В быстром

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5) 

обновлялись СВИФТ 3

view.backgroundColor = UIColor.white.withAlphaComponent(0.5) 
+0

Это не касается заданного вопроса. –

+0

Это дает мне ошибку: «Значение типа« UIColor »не имеет цвета участникаWithAlphaComponent». – Krivvenz

+1

Здравствуйте @Krivvenz, 'colorWithAlphaComponent' был переименован в 'withAlphaComponent'. См. Мой отредактированный ответ. –

3

простейшее решение, как обсуждалось это изменить альфа следующим образом: обновленная версия для Xcode 8 Swift 3:

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4) 

Objective C:

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; 

См Apple, Docs разработчиков здесь: https://developer.apple.com/reference/uikit/uiview/1622417-alpha

+0

Да, я применил это, но просмотр не стал прозрачным. Я использовал этот код раньше много раз. но на этот раз он не работает. и показывая мой взгляд как сплошной черный цвет. поэтому любой альтернативный метод или он изменился с новыми обновлениями iOS? – Moxarth

+0

Скорее всего, вид за вашим yourParentView должен быть сплошным черным, пожалуйста, проверьте свою раскадровку для xib, а также ваш код, который установлен в черный цвет из любого места. Надеюсь, это поможет –

+0

Я просто нажимаю другой вид с одного вида. после этого кода прозрачный вид станет прозрачным. Я использовал его много раз раньше. это так просто. -> settings * set = [[settings alloc] initWithNibName: @ "settings" bundle: nil]; -> set.view.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent: 0.3f]; -> [self.navigationController pushViewController: set animated: YES]; – Moxarth

2

Установите Непрозрачность цвет фона вместо альфа не будут влиять на его мнения ребенка.

  1. выбрать вид.
  2. перейти приписывать инспектор, чем цвет фона
  3. нажмите на "других"
  4. Непрозрачность до 30%

это так. Счастливое кодирование !!!

Смежные вопросы