Когда вы звоните
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 .Похоже, это делает больше того, что вы пытаетесь сделать вручную самостоятельно.Проверьте этот вопрос, который я недавно задавал: Панорамирование (не смахивание) между контроллерами представления