淡出滚动UITextView覆盖图像?

时间:2014-07-07 15:50:51

标签: ios core-graphics cagradientlayer

我希望在背景图片上淡出滚动UITextView,类似于这个小例子顶部的渐变。

enter image description here

我正试图找出如何使用CAGradientLayer和掩码来实现这一目标。当视图中的文本滚动(垂直)时,我需要文本在到达视图框架之前变得透明,以给出它向上和向下淡出的幻觉。

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

3 个答案:

答案 0 :(得分:38)

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

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

答案 1 :(得分:6)

我从这个帖子的其他人那里得到了启发,但是已经将代码转换为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
    }

请参阅:image of textView bottom with gradient

答案 2 :(得分: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
    }