ios – UIScrollview动画取决于内容偏移量
发布时间:2020-12-15 01:50:05 所属栏目:百科 来源:网络整理
导读:我正在使用水平UIScrollView,我想要一个背景颜色转换,具体取决于内容偏移的x值. 示例:UIScrollView的宽度为640px.当内容偏移量等于0px时,背景颜色必须为红色.当内容偏移量为320像素时,背景必须为黄色.但最重要的是,当UIScrollview介于0px和320px之间时,背景
|
我正在使用水平UIScrollView,我想要一个背景颜色转换,具体取决于内容偏移的x值.
示例:UIScrollView的宽度为640px.当内容偏移量等于0px时,背景颜色必须为红色.当内容偏移量为320像素时,背景必须为黄色.但最重要的是,当UIScrollview介于0px和320px之间时,背景颜色必须介于红色和黄色之间. 提示:当您从搜索向左滑动时,iOS的Twitter应用程序具有相同的动画.导航上的标签稍微消失. 解决方法
您需要根据偏移百分比创建颜色.
在这样的颜色之间创建切换的最简单方法是使用HSB颜色空间. 此外,这不是动画. “动画”效果由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作为控制它的方法. 使用此方法,您可以控制不透明度,大小,旋转,字体大小等…您甚至可以组合多个内容(就像我使用RGB一样). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
