2014-08-30 89 views
0

我有一个3页的水平滚动视图。iOS梯度动画与uiscrollview分页

我想每个页面都有一个不同的背景颜色,并在三种颜色之间绘制渐变。

Page 1绿色,第2页蓝色和第3页红色。 我该怎么做?

我在想ScrollViewDidScroll委托方法:

- (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 
    } 
} 
} 

我可以使用fractionalPage来设置渐变的百分比是多少?

我读了startPointendPointCAGradientLayer的属性,但它似乎无法正常工作。

任何建议将不胜感激! 预先感谢您

回答

0

startPointendPoint性质被测量从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); 

但是,如果您的内容尺寸变得更大,这可能会导致内存问题。

我看了一下模拟人生,看起来并没有增加更多的页面。我去了10,它似乎与3页大致相同,但这是一个考虑因素,所以您可能不得不回到您根据水平偏移量调整颜色数组的原始理论。

我认为scrollviews内部分页有效地处理其子层以避免这种情况。

虽然甜美的配色方案。杰里加西亚会感到骄傲。

enter image description here

+0

您好,非常感谢您的回复。我试过你的代码。它可以工作,但不是我想的效果......无论如何,谢谢!我正在尝试使用'fractionalPage'的值(如果我在第一页中的值从0.0变为1.0 - 如果我在第二页中,则值从1.0变为2.0 ...)来设置最终颜色的位置(如果我们位于第一页,则为蓝色)。 – Tenaciousd93 2014-08-31 15:44:03