使 UIView 仅对某些视图透明

Make UIView Transparent to Only Certain Views

我目前有一个 UIView,它是完全透明的,并且放在许多其他标签之上。所有标签后面都有一张背景图片,而且,由于所有标签都是透明背景的,所以我可以透过它们看到图片。然后,由于这个放置在标签之上的视图也被设置为透明,我可以看到它后面的标签。有没有办法让这个视图只对背景图像透明?也就是说,当我看穿它时,我只能看到背景图像而看不到标签,就好像标签在这个视图下不存在一样。

P.S。我看过这个 post 肯定是相关的,但是答案中的 link 已经死了。

提前致谢!

编辑

这就是我的意思:

箭头指向的透明视图不在滚动视图中,而是悬停在滚动视图上方。 scrollview 中会有很多文本内容,因此当它们从 pointed view 下方经过时,它们将是可见的。如何让这个悬停视图只反映其背后的大图像视图,而不反映其背后的任何文本?也就是说,我希望当文本从这个视图下经过时,它们是不可见的,并且视图始终反映背景图像。而且,由于它是一个不断变化的图像而不是纯色,我不能只设置这个悬停视图的颜色来匹配背景。

我不太明白你的问题,但我会根据你提供的 link 给你一个解决方案。

所以在link中,我们有一个透明的大圆圈,我们希望把背景中的小圆圈挡住。

你能做的就是这个。

您创建了两个相同的视图。

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

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

  1. 显示视图(圆形)
  2. BackgroundView(圆形大小,与第一个视图相同的位置,与真实背景视图相同的颜色,在本例中为蓝色)
  3. 真实背景视图(蓝色)。

那么你所要做的就是将 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


}