问题描述
我的应用有一个入门部分,其中包含 4 个页面,用户可以水平滚动以了解如何使用该应用(标准).我希望当用户从一个页面滚动到另一个页面时背景颜色会发生变化.
I have an onboarding section of my app with 4 pages the users scrolls through horizontally to get an idea of how to use the app (standard). I want the background color to transition as the user scrolls from page to page.
我想要使用 4 个 RGB 值:
I have the 4 RGB values I want to use:
241,170,170
241,170,170
170,201,241
170,201,241
188,170,241
188,170,241
241,199,170
241,199,170
我知道我必须使用滚动视图委托 + 内容偏移来更改 uicolor 值,但我不确定如何让它转到我选择的特定颜色.
I know I must use the scroll view delegate + content offset to change the uicolor values, but im not sure how I get it to go to the specific colors ive selected.
任何帮助将不胜感激.任何实现都可以,快速或客观-c
Any help would be greatly appreciated. Any implementation would do, swift or objective-c
谢谢
推荐答案
对于任何有兴趣的人.这就是解决方案.我结合了我在堆栈上找到的一些答案并将其调整为使用 4 种颜色
For anyone interested. This is the solution. I combined some answers I found on stack and adapted it to use 4 colors
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat pageWidth = self.scrollView.frame.size.width; float fractionalPage = self.scrollView.contentOffset.x / pageWidth; NSInteger page = lround(fractionalPage); self.pageControl.currentPage = page; // horizontal CGFloat maximumHorizontalOffset = scrollView.contentSize.width - CGRectGetWidth(scrollView.frame); CGFloat currentHorizontalOffset = scrollView.contentOffset.x; // percentages CGFloat percentageHorizontalOffset = currentHorizontalOffset / maximumHorizontalOffset; NSLog(@"content offfset: %f", percentageHorizontalOffset); if (percentageHorizontalOffset < 0.333333) { self.view.backgroundColor = [self fadeFromColor:self.colorArray[0] toColor:self.colorArray[1] withPercentage:percentageHorizontalOffset*3]; } else if (percentageHorizontalOffset >= 0.333333 && percentageHorizontalOffset < 0.666667) { self.view.backgroundColor = [self fadeFromColor:self.colorArray[1] toColor:self.colorArray[2] withPercentage:(percentageHorizontalOffset-0.333333)*3]; } else if (percentageHorizontalOffset >= 0.666667) { self.view.backgroundColor = [self fadeFromColor:self.colorArray[2] toColor:self.colorArray[3] withPercentage:(percentageHorizontalOffset-0.666667)*3]; } } - (UIColor *)fadeFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor withPercentage:(CGFloat)percentage { // get the RGBA values from the colours CGFloat fromRed, fromGreen, fromBlue, fromAlpha; [fromColor getRed:&fromRed green:&fromGreen blue:&fromBlue alpha:&fromAlpha]; CGFloat toRed, toGreen, toBlue, toAlpha; [toColor getRed:&toRed green:&toGreen blue:&toBlue alpha:&toAlpha]; //calculate the actual RGBA values of the fade colour CGFloat red = (toRed - fromRed) * percentage + fromRed; CGFloat green = (toGreen - fromGreen) * percentage + fromGreen; CGFloat blue = (toBlue - fromBlue) * percentage + fromBlue; CGFloat alpha = (toAlpha - fromAlpha) * percentage + fromAlpha; // return the fade colour return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; }