使UIView仅对某些视图透明

时间:2018-10-15 05:38:47

标签: ios swift uiview core-graphics transparency

我目前有一个UIView,它是完全透明的,并置于许多其他标签之上。所有标签后面都有一个背景图像,并且由于所有标签都是透明背景,因此我可以透过它们看到图片。然后,由于此放置在标签顶部的视图也设置为透明,因此我可以看到其后面的标签。有没有办法使该视图仅对背景图像透明?那样的话,当我看到它时,我只会看到背景图像而不是标签,好像标签在此视图下不存在。

P.S。我已经看过这个post的确与之相关,但是答案中的链接已消失。

谢谢!

编辑

这是我的意思:

enter image description here

箭头指向的透明视图不在滚动视图中,而是悬停在其上方。滚动视图中将有很多文本内容,因此当它们在指向视图下通过时,它们将是可见的。如何使该悬停视图仅反映其背后的大imageview,而不反映其背后的任何文本?也就是说,我希望当文本在此视图下通过时,它们是不可见的,并且该视图始终反映背景图像。而且,由于它是不断变化的图像,而不是纯色,因此我不能仅将悬停视图的颜色设置为与背景匹配。

1 个答案:

答案 0 :(得分:0)

我确实没有收到您的问题,但是我将为您提供所提供的链接的解决方案。

因此,在链接中,我们有一个透明的大圆圈,我们希望在背景右侧阻止该小圆圈。

这是您能做的。

您创建两个相同的视图。

第一个视图是您的普通视图,您可以在其中显示任何内容。第二个是backgroundView,它的位置和大小与第一个视图相同。但是要注意的是,backgroundView将显示与真实背景视图相同的背景颜色。

所以视图层次结构将是这样

  1. 显示视图(圆形)
  2. BackgroundView(圆圈大小,与第一个视图相同的位置,与真实背景视图相同的颜色,在这种情况下为蓝色)
  3. Real BackgroundView(蓝色)。

然后您要做的就是将backgroundView的alpha值保持为1,然后将第一个视图的alpha值更改为0.6

示例代码

 private func addCircle(){
    // adding a blue circle
    let circleView = UIView()
    circleView.backgroundColor = .blue
    circleView.alpha = 0.5

    view.addSubview(circleView)

    circleView.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
    circleView.center = view.center
    circleView.layer.cornerRadius = 100 / 2
    circleView.layer.masksToBounds = true


    // adding a backgroundView
    let backgroundView = UIView()
    backgroundView.backgroundColor = .red
    view.insertSubview(backgroundView, belowSubview: circleView)

    backgroundView.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
    backgroundView.center = view.center
    backgroundView.layer.cornerRadius = 100 / 2
    backgroundView.layer.masksToBounds = true


}