Прозрачный вид на другой прозрачный UIView с непрозрачным контентом? - PullRequest
6 голосов
/ 16 января 2012

Идея состоит в том, чтобы показать диалог прогресса.Я пытаюсь покрыть родительский вид (обычно весь экран) прозрачным черным видом (альфа 0.2).Кроме того, я хочу показать уменьшенный вид, также прозрачный с другим цветом.Это может не зависеть от цвета или прозрачности первого вида.В этом втором представлении я хочу непрозрачные элементы пользовательского интерфейса.Я перепробовал все и даже нашел посты, которые имеют дело с чем-то похожим, но используют только один прозрачный слой.И те уже используют странные трюки.Есть ли стандартный, простой способ добиться этого?

Ответы [ 5 ]

9 голосов
/ 17 января 2012

Без каких-либо взломов или сложных и, возможно, медленных пользовательских drawRect:, это возможно, если вы группируете свои виды:

Создайте ограничивающий вид, который охватывает и содержит весь диалог.Само это представление не имеет видимого содержимого, а его backgroundColor понятен.Его альфа равен 1.0.

Теперь добавьте к этому все прозрачные представления (с альфа <1), которые вы хотите, а также добавьте непрозрачные представления.Будьте осторожны, чтобы не добавлять какие-либо непрозрачные виды в качестве подпредставлений прозрачных, вместо этого добавляйте их как прямые подпредставления ограничивающего вида.Таким образом, они унаследуют его альфа 1.0. </p>

UIView *progressDialogView = [[UIView alloc] initWithFrame:dialogFrame];
progressDialogView.backgroundColor = [UIColor clearColor];
progressDialogView.alpha = 1.0; //you can leave this line out, since this is the default.

UIView *halfTransparentBackgroundView = [[UIView alloc] initWithFrame:dialogFrame];
halfTransparentBackgroundView.backgroundColor = [UIColor blackColor]; //or whatever...
halfTransparentBackgroundView.alpha = 0.5;
[progressDialogView addSubview: halfTransparentBackgroundView];

UIView *progressBarView = [[UIView alloc] initWithFrame:progressBarFrame];
progressBarView.backgroundColor = [UIColor blueColor];
[progressDialogView addSubview: progressBarView];
5 голосов
/ 24 августа 2012

Вместо установки свойства alpha, используйте следующее для установки цвета фона / непрозрачности для каждого вида:

view1.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:.3];

Используйте любые значения для красного, зеленого, синего и альфа-канала.

3 голосов
/ 17 января 2012

Я нашел ответ в блоге: http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

Решение состоит в том, чтобы переопределить drawRect: и позаботиться о альфе в нем.Вы не можете касаться свойства UIView's alpha, а также не можете устанавливать цвет фона представления на что-либо кроме прозрачного.Все рисунки должны быть выполнены в drawRect:. Таким образом, я смог сложить прозрачные виды и поместить непрозрачные элементы сверху.

2 голосов
/ 17 мая 2013

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

self.alpha = 0.5;

Например:

- (void) configureView
{
    self.frame = CGRectMake(0, 0, 640, 960);
    self.backgroundColor = [UIColor greyColor];
    self.alpha = 0.5;
}
1 голос
/ 16 января 2012

Добавление непрозрачного вида в качестве подпредставления прозрачного вида не будет работать.То, что я сделал в прошлом, - это класс UIView, который добавляет полупрозрачное подпредставление и непрозрачное подпредставление.Таким образом, прозрачный вид не повлияет на непрозрачный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...