我有一个水平的UIScrollView
其宽度为960
,足以容纳3个UIViewController
view's.
每个视图只有一个背景颜色。第一个是粉色,第二个是蓝色,第三个是绿色。
我想在用户滚动时将可见颜色混合/混合/淡化在一起。
因此,如果您从第 1 页(粉色)滚动到第 2 页(蓝色),当用户完全滑到第二页时,在最终到达最终蓝色之前,会出现某种类型的粉色和蓝色混合/混合/淡出。
我发现了一个关于我正在尝试做什么的问题,并且我已经实现了可以在此处找到的答案:https://stackoverflow.com/a/26159561/3344977
这个答案确实有效,我唯一的问题是这个答案只是为了使用 2 个屏幕/颜色而创建的,而我有 3 个屏幕/颜色。
我了解这个答案的基础知识,它取决于 UIScrollView 的contentOffset.x
计算当前颜色,但除此之外,我的数学很糟糕,这阻碍了我弄清楚如何修改它以使用第三种颜色。
Fogmeister 发布的答案非常有效!
这是翻译成 Swift 的相同答案:
// this just gets the percentage offset.
// 0,0 = no scroll
// 1,1 = maximum scroll
func scrollViewdidScrollToPercentageOffset(scrollView: UIScrollView, percentageOffset: CGPoint) {
// get your colours to fade between
var colors = [UIColor.redColor(), UIColor.blueColor(), UIColor.greenColor()]
// choose the colours to fade between based on the percentage.
if (percentageOffset.x < 0.5) {
// multiply the offset by 2 because we want 0.5 to be 100%
scrollView.backgroundColor = fadeFromColor(colors[0], colors[1], percentageOffset.x*2)
} else {
// minus 0.5 because we want 0.5 to be 0%
scrollView.backgroundColor = fadeFromColor(colors[1], colors[2], (percentageOffset.x - 0.5)*2)
}
}
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
var red = (toRed - fromRed) * withPercentage + fromRed
var green = (toGreen - fromGreen) * withPercentage + fromGreen
var blue = (toBlue - fromBlue) * withPercentage + fromBlue
var alpha = (toAlpha - fromAlpha) * withPercentage + fromAlpha
// return the fade colour
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)