24

我正在寻找淡出UITextView背景图像上的滚动,类似于这个小示例顶部的渐变。

在此处输入图像描述

我正在尝试弄清楚如何使用CAGradientLayer和遮罩来实现这一目标。当视图中的文本滚动(垂直)时,我需要文本在到达视图框架之前变得透明,以产生它向上和向下淡出的错觉。

关于我如何实现这一目标的任何提示?

4

3 回答 3

43

哦,伙计,我经常使用这个。将其保存为片段:

CAGradientLayer *gradient = [CAGradientLayer layer];

gradient.frame = self.textView.superview.bounds;
gradient.colors = @[(id)[UIColor clearColor].CGColor, (id)[UIColor blackColor].CGColor, (id)[UIColor blackColor].CGColor, (id)[UIColor clearColor].CGColor];
gradient.locations = @[@0.0, @0.03, @0.97, @1.0];

self.textView.superview.layer.mask = gradient;

此解决方案要求您的文本视图嵌入到它自己的视图中。这将 3% 的淡入淡出应用于文本视图的顶部和底部。gradient.locations根据您的需要进行修改。

于 2014-07-07T15:55:16.580 回答
8

我从这个线程中受到其他人的启发,但已将代码转换为 Swift 并使用起点和终点代替,在底部制作渐变。

if let containerView = textView.superview {
    let gradient = CAGradientLayer(layer: containerView.layer)
    gradient.frame = containerView.bounds
    gradient.colors = [UIColor.clearColor().CGColor, UIColor.blueColor().CGColor]
    gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
    gradient.endPoint = CGPoint(x: 0.0, y: 0.85)
    containerView.layer.mask = gradient
    }

请参阅:带有渐变的 textView 底部图像

于 2015-12-08T22:59:40.783 回答
0

斯威夫特 5

获取 Andrej 的代码并为 Swift 5 更新它

if let containerView = textView.superview {
    let gradient = CAGradientLayer(layer: containerView.layer)
    gradient.frame = containerView.bounds
    gradient.colors = [UIColor.clear.cgColor, UIColor.blue.cgColor]
    //the line above is update for swift 5
    gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
    gradient.endPoint = CGPoint(x: 0.0, y: 0.85)
    containerView.layer.mask = gradient
    }
于 2020-10-30T07:46:09.543 回答