使用透明度:透明视图后面的视图应该只透过而不是重叠

Posted

技术标签:

【中文标题】使用透明度:透明视图后面的视图应该只透过而不是重叠【英文标题】:Working with transparency: View behind transparent view should only shine through and not overlap 【发布时间】:2015-05-29 13:46:10 【问题描述】:

我目前正在处理透明度问题,我希望获得以下效果:

如您所见,这条线占据了视图的整个宽度。这个屏幕上还有一些透明的 UIView。由于上面的透明 UIView,这条线似乎在透明 UIView 下方,如果它重叠,则它具有另一种颜色。当没有重叠时,线条将获得正常颜色。

我怎样才能得到这个效果?

我尝试将 UIView 的背景设置为透明,但没有帮助。该线具有其正常颜色并且不与透明度交互。此外,我尝试更改视图本身的透明度,但结果相同。

上面的矩形是用代码完成的

UIView rectangle = new UIView (new CGRect (10, 10, 200, 120));
rectangle.BackgroundColor = UIColor.FromRGBA (204,115,225, 50);

UIView line = new UIView (new CGRect (0, 105, 320, 1));
line.BackgroundColor = UIColor.Red;

View.AddSubview (line);
View.AddSubview (rectangle);

line.SendSubviewToBack (rectangle);

下面的矩形是在 ios 设计器中创建的。

我错过了什么吗?

【问题讨论】:

为什么要将矩形发送到后面,您的问题看起来应该在前面...... 矩形甚至不是线的子视图。此行不正确,可能是导致问题的原因。 我想发送矩形后面的线。即使没有此代码行,我也尝试了一些事情。但我没有得到它设法得到我的结果。 【参考方案1】:

这都是关于子视图的 z 顺序的。

line.SendSubviewToBack (rectangle);

可能不是你想要的。

如果您添加具有正常红色的线并添加其 alpha 下降到例如 UIView 0.5,那么你应该得到你想要的效果。

【讨论】:

现在我尝试用正常的背景颜色(不透明)创建我的 rectangle。然后我将视图的透明度设置为某个值,并且没有使用SendSubviewToBack 方法。线条始终具有全彩,透明度没有效果。 z 顺序应该是 imho parent UIView, line, rectangle (升序 -> 最后一个是最前面的 UIView)。这不是按照将子视图添加到我的父级UIView 的正常顺序完成的吗?【参考方案2】:

在我的情况下,子视图的 z 顺序是正确的。根据颜色,我想要的效果是否可能。所以我做了以下:

为淡紫色矩形选择另一种背景颜色并调整 Alpha 透明度以使其看起来相似。所以是这样的:

rectangle.BackgroundColor = UIColor.FromRGBA (245/255.0f,227/255.0f,249/255.0f,0.7f);

【讨论】:

以上是关于使用透明度:透明视图后面的视图应该只透过而不是重叠的主要内容,如果未能解决你的问题,请参考以下文章

如何使用重叠的透明视图控制器重新创建 FaceTime 的导航视图控制器过渡动画?

Android中的重叠视图

如何处理两个重叠 div 的“双重不透明度”

iOS 设置视图半透明而子控件不透明

重叠的透明 UIView

视图控制器透明背景