透明视图在另一个透明的UIView上有不透明的内容?

时间:2012-01-16 15:44:45

标签: ios cocoa-touch uiview

想法是显示进度对话框。 我试图用透明的黑色视图(alpha 0.2)覆盖父视图(通常是整个屏幕)。最重要的是,我想显示一个较小的视图,也透明与另一种颜色。它可能不受第一视图的颜色或透明度的影响。 在第二个视图中,我想要不透明的UI元素。 我已经尝试了一切,甚至在这里找到了处理类似但只使用一个透明层的帖子。而那些已经使用了奇怪的技巧。 是否有一种标准的,简单的方法来实现这一目标?

5 个答案:

答案 0 :(得分:9)

如果您对视图进行分组,则无需任何黑客攻击或复杂且可能会导致自定义drawRect:速度变慢:

创建一个包含并保存整个对话框的边界视图。此视图本身没有可见内容,其backgroundColor很清晰。它的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];

答案 1 :(得分:5)

使用以下方法设置每个视图的背景颜色/不透明度,而不是设置alpha属性:

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

使用您想要的红色,绿色,蓝色和alpha值。

答案 2 :(得分:3)

我在博客中找到了答案:http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

解决方案是覆盖drawRect:并处理其中的alpha。您可能不会触摸UIView's alpha属性,也不能将视图的背景颜色设置为透明的任何颜色。所有绘图必须在drawRect:.中进行,这样我就可以叠加透明视图并将不透明元素放在顶部。

答案 3 :(得分:2)

我需要在另一个视图的顶部有透明视图。透明的观点我刚刚做了:

self.alpha = 0.5;

例如:

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

答案 4 :(得分:1)

将不透明视图添加为透明视图的子视图将不起作用。我过去所做的是有一个UIView类,它添加了一个半透明的子视图和一个不透明的子视图。这样透明视图不会影响不透明视图。