iOS渐变动画与uiscrollview分页
我有一个3页的水平滚动视图 我想有一个不同的背景颜色为每一页,并绘制3种颜色之间的梯度 第1页为绿色,第2页为蓝色,第3页为红色。 我该怎么做 我在考虑iOS渐变动画与uiscrollview分页,ios,objective-c,uiscrollview,gradient,cagradientlayer,Ios,Objective C,Uiscrollview,Gradient,Cagradientlayer,我有一个3页的水平滚动视图 我想有一个不同的背景颜色为每一页,并绘制3种颜色之间的梯度 第1页为绿色,第2页为蓝色,第3页为红色。 我该怎么做 我在考虑ScrollViewDidScrolldelegate方法: - (void)scrollViewDidScroll:(UIScrollView *)sender { CGFloat pageWidth = self.statisticScrollView.frame.size.width; float fractionalPage = se
ScrollViewDidScroll
delegate方法:
- (void)scrollViewDidScroll:(UIScrollView *)sender
{
CGFloat pageWidth = self.statisticScrollView.frame.size.width;
float fractionalPage = self.statisticScrollView.contentOffset.x / pageWidth;
NSLog(@"fractional Page: %f", fractionalPage);
NSInteger lowerNumber = floor(fractionalPage);
NSLog(@"lower Page: %i", lowerNumber);
NSInteger upperNumber = lowerNumber + 1;
NSLog(@"upper Page: %i", upperNumber);
if (self.lastContentOffset > sender.contentOffset.x){
//RIGHT --->
if (lowerNumber == 0) {
//gradient green to blue
}else if (lowerNumber == 1){
//gradient blue to red
}else if (lowerNumber == 2){
//end pages
}
}else if (self.lastContentOffset < sender.contentOffset.x){
//LEFT <----
if (lowerNumber == 0) {
//gradient blue to green
}else if (lowerNumber == 1){
//gradient red to blue
}else if (lowerNumber == 2){
//end pages
}
}
}
-(无效)scrollViewDidScroll:(UIScrollView*)发送方
{
CGFloat pageWidth=self.statisticScrollView.frame.size.width;
浮点分数页=self.statisticScrollView.contentOffset.x/pageWidth;
NSLog(@“分数页:%f”,分数页);
NSInteger lowerNumber=地板(分页);
NSLog(@“下页:%i”,下页编号);
NSInteger upperNumber=LOWERNNUMBER+1;
NSLog(@“上页:%i”,上页编号);
if(self.lastContentOffset>sender.contentOffset.x){
//对-->
如果(lowerNumber==0){
//渐变绿色到蓝色
}else if(lowerNumber==1){
//渐变蓝到红
}else if(lowerNumber==2){
//结束页
}
}else if(self.lastContentOffset //左起始点和端点属性是从0到1测量的,不在视图的坐标系中,这可能是您遇到的问题。因此,要从一侧到另一侧运行渐变,您需要这样声明
gradlayer.startPoint = CGPointMake(0, 0.5);
gradlayer.endPoint = CGPointMake(1, 0.5);
实现所需操作的一种简单方法是,使用预先配置的渐变向滚动视图添加一个子层
CGFloat width = CGRectGetWidth(self.view.frame);
CGFloat height = CGRectGetHeight(self.view.frame);
self.scroller.contentSize = CGSizeMake(3*width, height);
self.gradlayer = [CAGradientLayer layer];
self.gradlayer.frame = CGRectMake(0, 0, width*3, height);
[self.scroller.layer addSublayer:self.gradlayer];
self.gradlayer.colors = @[((id)[UIColor redColor].CGColor),((id)[UIColor greenColor].CGColor),((id)[UIColor blueColor].CGColor)];
self.gradlayer.startPoint = CGPointMake(0, 0.5);
self.gradlayer.endPoint = CGPointMake(1, 0.5);
但是,如果内容大小变大,这可能会导致内存问题
我看了一下Sim卡,它似乎没有随着页面的增加而增长。我看了10页,它似乎与3页保持不变,但这是一个考虑因素,因此你可能不得不回到你最初的理论,即根据水平偏移调整颜色数组
我认为scrollviews内部分页可以有效地处理其子层以避免这种情况
不过颜色搭配不错,杰瑞·加西亚会很自豪的
您好,谢谢您的回复。我尝试了您的代码。它完全有效,但不是我所想的效果…无论如何,谢谢!我正在尝试使用FractalPage
的值(如果我在第一页,值从0.0到1.0-如果我在第二页,值从1.0到2.0…)来设置结束颜色的位置(如果我们在第一页,则为蓝色)。