我正在使用水平UIScrollView,我想要一个背景颜色转换,具体取决于内容偏移的x值.
示例:UIScrollView的宽度为640px.当内容偏移量等于0px时,背景颜色必须为红色.当内容偏移量为320像素时,背景必须为黄色.但最重要的是,当UIScrollview介于0px和320px之间时,背景颜色必须介于红色和黄色之间.
解决方法
您需要根据偏移百分比创建颜色.
此外,这不是动画. “动画”效果由scrollview提供给您.您只需在每次滚动视图更改时设置颜色.
在委托方法中,你可以做这样的事情.
编辑以使更灵活
// this just calculates the percentages Now and passes it off to another method. - (void)scrollViewDidScroll:(UIScrollView *)scrollView { // vertical CGFloat maximumVerticalOffset = scrollView.contentSize.height - CGRectGetHeight(scrollView.frame); CGFloat currentVerticalOffset = scrollView.contentOffset.y; // horizontal CGFloat maximumHorizontalOffset = scrollView.contentSize.width - CGRectGetWidth(scrollView.frame); CGFloat currentHorizontalOffset = scrollView.contentOffset.x; // percentages CGFloat percentageHorizontalOffset = currentHorizontalOffset / maximumHorizontalOffset; CGFloat percentageVerticalOffset = currentVerticalOffset / maximumVerticalOffset; [self scrollView:scrollView didScrollToPercentageOffset:CGPointMake(percentageHorizontalOffset,percentageVerticalOffset)]; } // this just gets the percentage offset. // 0,0 = no scroll // 1,1 = maximum scroll - (void)scrollView:(UIScrollView *)scrollView didScrollToPercentageOffset:(CGPoint)percentageOffset { UIColor *HSBColor = [self HSBColorForOffsetPercentage:percentageOffset.x]; UIColor *RGBColor = [self RGBColorForOffsetPercentage:percentageOffset.x]; } // HSB color just using Hue - (UIColor *)HSBColorForOffsetPercentage:(CGFloat)percentage { CGFloat minColorHue = 0.0; CGFloat maxColorHue = 0.2; // this is a guess for the yellow hue. CGFloat actualHue = (maxColorHue - minColorHue) * percentage + minColorHue; // change these values to get the colours you want. // I find reducing the saturation to 0.8 ish gives nicer colours. return [UIColor colorWithHue:actualHue saturation:1.0 brightness:1.0 alpha:1.0]; } // RGB color using all R,G,B values - (UIColor *)RGBColorForOffsetPercentage:(CGFloat)percentage { // RGB 1,0 = red CGFloat minColorRed = 1.0; CGFloat minColorGreen = 0.0; CGFloat minColorBlue = 0.0; // RGB 1,1,0 = yellow CGFloat maxColorRed = 1.0; CGFloat maxColorGreen = 1.0; CGFloat maxColorBlue = 0.0; // if you have specific beginning and end RGB values then set these to min and max respectively. // it should even work if the min value is greater than the max value. CGFloat actualRed = (maxColorRed - minColorRed) * percentage + minColorRed; CGFloat actualGreen = (maxColorGreen - minColorGreen) * percentage + minColorGreen; CGFloat actualBlue = (maxColorBlue - minColorBlue) * percentage + minColorBlue; return [UIColor colorWithRed:actualRed green:actualGreen blue:actualBlue alpha:1.0]; }
我不知道RGB方法将如何对中间值执行.它可能在中间变成棕色……但你可以玩.
这应该让您了解如何使用滚动视图来动画ANYTHING作为控制它的方法.