2012-01-16 2 views
6

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

ответ

3

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

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

1

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

9

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

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

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

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]; 
+0

Я знаю, что "трюк". Но становится трудным, если вы хотите получить полупрозрачный вид поверх более прозрачного представления и кнопок поверх всего непрозрачного. Поэтому я доволен кодом, который я нашел в этом блоге, на который я ссылался в своем собственном ответе. Он вообще не использует значение Alpha. – Krumelur

+2

Как это осложняется? Я так думаю, что он остается очень аккуратным и понятным. – fzwo

+0

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

5

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

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

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

2

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

self.alpha = 0.5; 

Например:

- (void) configureView 
{ 
    self.frame = CGRectMake(0, 0, 640, 960); 
    self.backgroundColor = [UIColor greyColor]; 
    self.alpha = 0.5; 
} 
Смежные вопросы