Удалите ScrollView Gradient Fade внизу, когда достигнете дна - PullRequest
0 голосов
/ 07 января 2019

У меня есть UIScrollView, у которого есть исчезающий нижний градиентный слой (как на скриншоте ниже). Я хочу удалить его, когда достигну нижней части UIScrollView. Я нашел сообщения ниже, но у меня ничего не получалось.

https://stablekernel.com/how-to-fade-out-content-using-gradients-in-ios/

Исчезающие края UITableView

let gradient = CAGradientLayer()
gradient.frame = myTextView.bounds
gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor, UIColor.black.cgColor, UIColor.clear.cgColor]
gradient.locations = [0, 0.0, 0.7, 1]
myTextView.layer.mask = gradient

override func layoutSubviews() {
    gradient.frame = kvkkTextView.bounds
}

Когда я пытаюсь изменить рамку градиента в

private func updateGradientFrame() {
gradient.frame = CGRect(
    x: 0,
    y: kvkkTextView.contentOffset.y,
    width: kvkkTextView.bounds.width,
    height: kvkkTextView.bounds.height
)
}

Это вызывает странную ошибку. Когда я прокручиваю его, тексты отображаются на экране медленно (когда я быстро прокручиваю его, экран отображается пустым, а затем появляется текст).

screenshot

1 Ответ

0 голосов
/ 07 января 2019

Попробуйте это

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    updateGradientFrame()

    //On the scroll view content is over means there is no content anymore then hide the mask
    if scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.bounds.height {

        label.layer.mask = nil
    } else {

        //Else show the mask of UILabel
        label.layer.mask = gradient
    }
}

Обновление:

private func updateGradientFrame() {
    gradient.frame = CGRect(
        x: 0,
        y: scrollView.contentOffset.y,
        width: scrollView.bounds.width,
        height: scrollView.bounds.height
        )
}

URL GitHub: https://github.com/sateeshyegireddi/GradientScrollViewDemo

...