Как динамически изменить фон в PageViewController? - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь постепенно уменьшить цвет фона в PageViewController. Я хочу добавить цвет от страницы к другой.

До сих пор я пытался использовать базовый scrollView PageViewController, реализуя функцию scrollViewDidScroll и устанавливая цвет фона scrollview.

Посмотрите на следующий код:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offset = scrollView.contentOffset.x
    guard lowerIndex >= 0, upperIndex < colors.count else { return }
    let percentComplete = (offset / CGFloat(colors.count)) / (scrollView.frame.width / CGFloat(colors.count))
    scrollView.backgroundColor = fadeFromColor(fromColor: colorCurrent, toColor: colorAfter, withPercentage: percentComplete)
}

Эта функция использует пользовательскую функцию fadeFromColor, которая определяется следующим образом:

func fadeFromColor(fromColor: UIColor, toColor: UIColor, withPercentage: CGFloat) -> UIColor {
    var fromRed: CGFloat = 0.0
    var fromGreen: CGFloat = 0.0
    var fromBlue: CGFloat = 0.0
    var fromAlpha: CGFloat = 0.0

    fromColor.getRed(&fromRed, green: &fromGreen, blue: &fromBlue, alpha: &fromAlpha)

    var toRed: CGFloat = 0.0
    var toGreen: CGFloat = 0.0
    var toBlue: CGFloat = 0.0
    var toAlpha: CGFloat = 0.0

    toColor.getRed(&toRed, green: &toGreen, blue: &toBlue, alpha: &toAlpha)

    // calculate the actual RGBA values of the fade colour
    let red = (toRed - fromRed) * withPercentage + fromRed
    let green = (toGreen - fromGreen) * withPercentage + fromGreen
    let blue = (toBlue - fromBlue) * withPercentage + fromBlue
    let alpha = (toAlpha - fromAlpha) * withPercentage + fromAlpha

    // return the fade colour
    return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}

В настоящее время у меня проблемы с получением правильного цвета в нужное время. У вас есть идея лучше, чтобы решить мою проблему? Или ты считаешь, что хотя бы моя идея верна?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...