2012-01-16 114 views
6

這個想法是顯示一個進度對話框。 我試圖用一個透明的黑色視圖(alpha 0.2)來覆蓋父視圖(通常是整個屏幕)。最重要的是,我想展示一個更小的視圖,同時透明與另一種顏色。它可能不受第一視圖的顏色或透明度的影響。 在第二個視圖中我想要不透明的UI元素。 我已經嘗試了一切,甚至發現這裏處理類似的東西,但只使用一個透明層的帖子。而那些已經使用奇怪的技巧。 有沒有一個標準的,簡單的方法來實現這一目標?具有非透明內容的另一個透明UIView的透明視圖?

回答

1

將您的不透明視圖添加爲透明視圖的子視圖將不起作用。我過去所做的是有一個UIView類,它添加了一個半透明的子視圖和一個不透明的子視圖。這樣透明視圖不會影響不透明的視圖。

9

沒有任何黑客周圍或複雜的,可能緩慢定製drawRect:,這是可能的,如果你組的意見吧:

創建包含並保持整個對話的邊界視圖。該視圖本身沒有可見的內容,並且其背景顏色清晰。它的alpha是1.0。

現在將所有透明視圖(包含alpha < 1)的透明視圖添加到您需要的視圖中,並添加非透明視圖。注意不要將任何非透明視圖添加爲透明視圖的子視圖,而應將其添加爲邊界視圖的直接子視圖。這樣,他們將繼承1.0的alpha。

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 2012-01-17 16:11:41

+2

它如何變得複雜?我認爲這種方式非常整潔,易於掌握。 – fzwo 2012-01-17 16:45:38

+0

複雜化的方式是,您始終需要兩個視圖,只有一個透明且非透明的內容在頂部。這就是爲什麼我更喜歡其他解決方案。 – Krumelur 2012-01-18 08:59:09

5

而不是設置alpha屬性,使用下面的設置背景顏色/不透明度爲每個視圖:

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

使用任何值,你的願望的紅,綠,藍和alpha。

2

我需要在另一個視圖頂部有透明視圖。視圖,使透明我只是做:

self.alpha = 0.5; 

例如:

- (void) configureView 
{ 
    self.frame = CGRectMake(0, 0, 640, 960); 
    self.backgroundColor = [UIColor greyColor]; 
    self.alpha = 0.5; 
}