我有一个scrollview> ContentView> TextLabel设置,其中渐变显示但不按我想要的方式工作。这是一个清晰的背景scrollView,所以我正在寻找的是一个清晰的渐变掩码文本。我found something类似于我在Objective-C中寻找但该线程没有Swift解决方案。
我的最终目标似乎是大多数人可能会使用的东西,所以我很惊讶还没有Swift版本。我正在尝试编写的功能是:
我尝试使用此代码来处理子弹#2:
let gradient = CAGradientLayer()
gradient.frame = self.bio_ScrollView.superview!.bounds ?? CGRectNull
gradient.colors = [UIColor.whiteColor().CGColor, UIColor.clearColor().CGColor]
//gradient.locations = [0, 0.15, 0.25, 0.75, 0.85, 1.0]
gradient.locations = [0.6, 1.0]
self.bio_ScrollView.superview!.layer.mask = gradient
但它会消除所有内容,包括它下方的按钮,这显然不在滚动视图中:
如果我删除.superview并将其直接应用于scrollView,它只会淡化可见的初始部分下方的所有文本:
有没有人知道如何正确实现这个?
答案 0 :(得分:2)
想出来。首先,确保添加了正确的视图层次结构。滚动视图需要嵌入到容器视图中(这将应用于渐变):
将“scrollViewDelegate”添加到ViewController类:
class ViewController_WithScrollView: UIViewController, UIScrollViewDelegate {
....
使用IBOutlets连接上面列出的四个视图。然后,在viewDidLoad中设置scrollView委托:
override func viewDidLoad() {
super.viewDidLoad()
yourScrollView.delegate = self
//+All your other viewDidLoad stuff
}
然后实现scrollViewDidScroll func,由于你上面的工作,它将自动运行。
func scrollViewDidScroll (scrollView: UIScrollView) {
if scrollView.isAtTop {
self.applyGradient_To("Bot")
} else if scrollView.isAtBottom {
self.applyGradient_To("Top")
} else {
self.applyGradient_To("Both")
}
}
然后添加这个神奇的渐变代码:
func applyGradient_To (state: String) {
let gradient = CAGradientLayer()
gradient.frame = self.yourScrollView.superview!.bounds ?? CGRectNull
switch state {
case "Top":
gradient.colors = [UIColor.clearColor().CGColor,UIColor.whiteColor().CGColor]
gradient.locations = [0.0,0.2]
case "Bot":
gradient.colors = [UIColor.whiteColor().CGColor, UIColor.clearColor().CGColor]
gradient.locations = [0.8,1.0]
default:
gradient.colors = [UIColor.clearColor().CGColor,UIColor.whiteColor().CGColor,UIColor.whiteColor().CGColor, UIColor.clearColor().CGColor]
gradient.locations = [0.0,0.2,0.8,1.0]
}
self.yourScrollView.superview!.layer.mask = nil
self.yourScrollView.superview!.layer.mask = gradient
}
应该这样做!