UIView透明渐变

鉴于iOS上的任意UIView,有没有一种方法使用核心graphics(CAGradientLayer想到)应用“前景透明”的梯度呢?

我不能使用标准的CAGradientLayer,因为背景比UIColor更复杂。 我也不能叠加一个PNG,因为当我的子视图沿着它的父级垂直滚动视图(见图)滚动时,背景将会改变。

我有一个非优雅的回退:有我的uiview剪辑其子视图,并随着父滚动视图滚动而移动背景的预先呈现的渐变png。

透明的uiview梯度问题

这是一个令人尴尬的简单的解决方法:应用一个CAGradientLayer作为我的子视图的掩码。

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = _fileTypeScrollView.bounds; gradientLayer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil]; gradientLayer.startPoint = CGPointMake(0.8f, 1.0f); gradientLayer.endPoint = CGPointMake(1.0f, 1.0f); _fileTypeScrollView.layer.mask = gradientLayer; 

感谢Cocoanetics指出我正确的方向!

渐变示例

我遇到了同样的问题,结果写了我自己的课。 这似乎是严重的矫枉过正,但这是我能find的做透明度渐变的唯一方法。 你可以在这里看到我的写作和代码示例

它基本上归结为一个自定义UIView创build两个图像。 一个是纯色,另一个是用作图像蒙版的渐变。 从那里我将结果图像应用到uiview.layer.content。

乔,我希望这会有所帮助

我讨厌这样说,但我认为你已经进入了自定义的UIView土地。 我认为我会尝试在一个自定义UIView overiding drawRect例程中实现。

有了这个,你可以拥有这个视图,放在你实际的滚动视图之上,并且有你的渐变视图(如果你愿意的话)“传递”所有的触摸事件(即放弃第一响应者)。

这就是我要做的。

第1步 – 定义一个自定义的渐变视图

 import UIKit class GradientView: UIView { override open class var layerClass: AnyClass { return CAGradientLayer.classForCoder() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) let gradientLayer = self.layer as! CAGradientLayer gradientLayer.colors = [ UIColor.white.cgColor, UIColor.init(colorLiteralRed: 1, green: 1, blue: 1, alpha: 0).cgColor ] backgroundColor = UIColor.clear } } 

第2步 – 拖放一个UIView到你的故事板,并将其自定义类设置为GradientView

在这里输入图像说明

举个例子,上面的渐变视图是这样的:

在这里输入图像说明


编辑:要使layer的透明度起作用,您还必须设置UIView的背景颜色以清除颜色。