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



这个想法是显示一个进度对话框。我试图用透明的黑色视图(alpha 0.2)覆盖父视图(通常是整个屏幕)。除此之外,我想显示一个较小的视图,也可以用另一种颜色透明。它可能不受第一视图的颜色或透明度的影响。在第二个视图中,我想要不透明的UI元素。我尝试了所有的东西,甚至在这里发现了一些类似的帖子,但只使用了一个透明层。那些人已经使用了奇怪的伎俩。有没有一种标准的、简单的方法来实现这一点?

在没有任何黑客攻击或复杂且可能缓慢的自定义drawRect:的情况下,如果您对视图进行分组,这是可能的:

创建一个包含并保持整个对话框的边界视图。此视图本身没有可见的内容,并且其背景颜色是清晰的。其alpha为1.0。

现在,将所有透明视图(alpha<1的视图)添加到所需的视图中,同时添加不透明视图。请注意,不要将任何不透明视图添加为透明视图的子视图,而是将其添加为边界视图的直接子视图。这样,它们将继承其alpha 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];

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

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

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

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

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

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

self.alpha = 0.5;

例如:

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

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

最新更新