Затухание прокрутки UITextView над изображением?

Я хочу потушить прокрутку UITextView поверх фонового изображения, что-то похожее на градиент в верхней части этого маленького примера.

введите описание изображения здесь

Я пытаюсь понять, как я могу добиться этого, используя CAGradientLayer и маски. Поскольку текст в представлении прокручивается (по вертикали), мне нужно, чтобы текст стал прозрачным, прежде чем он попадет в рамку вида, чтобы создать иллюзию того, что он исчезает вверх и вниз.

Любые советы о том, как я мог бы достичь этого?

2 ответа

Решение

О, мужик, я этим часто пользуюсь. Сохраните его как фрагмент:

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 к вашим потребностям.

Меня вдохновили другие участники этой темы, но я преобразовал код в 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 с градиентом

Swift 5

Взять код Андрея и обновить его для 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
    }
Другие вопросы по тегам