使 UIView 仅对某些视图透明
Make UIView Transparent to Only Certain Views
我目前有一个 UIView,它是完全透明的,并且放在许多其他标签之上。所有标签后面都有一张背景图片,而且,由于所有标签都是透明背景的,所以我可以透过它们看到图片。然后,由于这个放置在标签之上的视图也被设置为透明,我可以看到它后面的标签。有没有办法让这个视图只对背景图像透明?也就是说,当我看穿它时,我只能看到背景图像而看不到标签,就好像标签在这个视图下不存在一样。
P.S。我看过这个 post 肯定是相关的,但是答案中的 link 已经死了。
提前致谢!
编辑
这就是我的意思:
箭头指向的透明视图不在滚动视图中,而是悬停在滚动视图上方。 scrollview 中会有很多文本内容,因此当它们从 pointed view 下方经过时,它们将是可见的。如何让这个悬停视图只反映其背后的大图像视图,而不反映其背后的任何文本?也就是说,我希望当文本从这个视图下经过时,它们是不可见的,并且视图始终反映背景图像。而且,由于它是一个不断变化的图像而不是纯色,我不能只设置这个悬停视图的颜色来匹配背景。
我不太明白你的问题,但我会根据你提供的 link 给你一个解决方案。
所以在link中,我们有一个透明的大圆圈,我们希望把背景中的小圆圈挡住。
你能做的就是这个。
您创建了两个相同的视图。
第一个视图是您的普通视图,您可以在上面显示任何内容。第二个你将是一个 backgroundView ,它与第一个视图具有相同的位置和相同的大小。但要注意的是,backgroundView 将显示与真实背景视图相同的背景颜色。
所以视图层次结构将是这样的
- 显示视图(圆形)
- 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
}
我目前有一个 UIView,它是完全透明的,并且放在许多其他标签之上。所有标签后面都有一张背景图片,而且,由于所有标签都是透明背景的,所以我可以透过它们看到图片。然后,由于这个放置在标签之上的视图也被设置为透明,我可以看到它后面的标签。有没有办法让这个视图只对背景图像透明?也就是说,当我看穿它时,我只能看到背景图像而看不到标签,就好像标签在这个视图下不存在一样。
P.S。我看过这个 post 肯定是相关的,但是答案中的 link 已经死了。
提前致谢!
编辑
这就是我的意思:
箭头指向的透明视图不在滚动视图中,而是悬停在滚动视图上方。 scrollview 中会有很多文本内容,因此当它们从 pointed view 下方经过时,它们将是可见的。如何让这个悬停视图只反映其背后的大图像视图,而不反映其背后的任何文本?也就是说,我希望当文本从这个视图下经过时,它们是不可见的,并且视图始终反映背景图像。而且,由于它是一个不断变化的图像而不是纯色,我不能只设置这个悬停视图的颜色来匹配背景。
我不太明白你的问题,但我会根据你提供的 link 给你一个解决方案。
所以在link中,我们有一个透明的大圆圈,我们希望把背景中的小圆圈挡住。
你能做的就是这个。
您创建了两个相同的视图。
第一个视图是您的普通视图,您可以在上面显示任何内容。第二个你将是一个 backgroundView ,它与第一个视图具有相同的位置和相同的大小。但要注意的是,backgroundView 将显示与真实背景视图相同的背景颜色。
所以视图层次结构将是这样的
- 显示视图(圆形)
- 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
}