2012-01-16 117 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; 
}