Как изменить цвет фона UIScrollView в Swift? - PullRequest
0 голосов
/ 26 сентября 2019

Я использую Xcode 11 и хотел бы иметь возможность изменять цвет фона UIScrollView при его перемещении со страницы на страницу в 6-страничной настройке.Мне удалось изменить содержимое метки для каждой страницы, но цвет фона «пропускается» до последнего в массиве цветов.

Массивы:

let stringArray = ["<- Swipe to begin", "Welcome", "Info", "more info", "more info 2", "end"]

let backgroundColorArray = [UIColor.orange, UIColor.blue, UIColor.red, UIColor.white, UIColor.green, UIColor.purple]

Затем содержимое прокрутки

func setupScrollView() {
    scrollView.delegate = self
    scrollView.contentSize = CGSize(width: self.view.frame.size.width * 6, height: scrollView.frame.size.height)

    for k in 0 ... 5 {
        scrollView.backgroundColor = backgroundColorArray[k]
    }

    for i in 0 ... 5 {
        let label = UILabel(frame: CGRect(x: scrollView.center.x + CGFloat(i) * self.view.frame.size.width - 130, y: 50, width: 260, height: 30))
        label.font = UIFont.boldSystemFont(ofSize: 26)
        label.textAlignment = .center
        label.text = stringArray[i]

        scrollView.addSubview(label)
    }
}

Цвет фона прокрутки меняется на фиолетовый, но не меняется от страницы к странице.Как правильно изменить цвета?

1 Ответ

2 голосов
/ 26 сентября 2019

Когда вы звоните

for k in 0 ... 5 {
    scrollView.backgroundColor = backgroundColorArray[k]
}

, вы просматриваете каждый цвет в backgroundColorArray и обновляете значение.Поскольку .purple является последним элементом в вашем backgroundColorArray, ваш вид прокрутки, в конце этого цикла for, устанавливается фиолетовым.Ваш цикл for по сути делает то же самое, что и scrollView.backgroundColor = backgroundColorArray[5].

Теперь я предлагаю вам реализовать UIScrollViewDelegate методы.Вы могли бы реализовать scrollViewDidScroll(scrollView:).Это вызывается каждый раз, когда изменяется смещение содержимого представления прокрутки.Затем вы можете установить оператор switch, который проверяет смещение содержимого вашего представления прокрутки и назначает цвет соответствующим образом:

extension MyViewController: UIScrollViewDelegate {
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        //Assuming your pages are situated horizontally from one another
        let page = scrollView.contentOffset.x / view.frame.width
        if page < 1 {
            scrollView.backgroundColor = backgroundColorArray[0]
        } else if page > 1 && page < 2 {
            scrollView.backgroundColor = backgroundColorArray[1]
        } else if page > 2 && page < 3 {
            scrollView.backgroundColor = backgroundColorArray[2]
        } else if page > 3 && page < 4 {
            scrollView.backgroundColor = backgroundColorArray[3]
        } else if page > 4 && page < 5 {
            scrollView.backgroundColor = backgroundColorArray[4]
        } else if page > 5 && page < 6 {
            scrollView.backgroundColor = backgroundColorArray[5]
        }
    }
}

Вы также можете интерполировать между цветами в зависимости от вашегосмещение содержимого представления прокрутки.Вот расширение UIColor, которое я использую для этого:

extension UIColor {
    static func interpolate(from fromColor: UIColor, to toColor: UIColor, with progress: CGFloat) -> UIColor {
        let fromComponents = fromColor.components
        let toComponents = toColor.components

        let r = (1 - progress) * fromComponents.r + progress * toComponents.r
        let g = (1 - progress) * fromComponents.g + progress * toComponents.g
        let b = (1 - progress) * fromComponents.b + progress * toComponents.b
        let a = (1 - progress) * fromComponents.a + progress * toComponents.a

        return UIColor(red: r, green: g, blue: b, alpha: a)
    }
}

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

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