0

我有一个 3 页的水平滚动视图。

我想为每一页设置一种不同的背景颜色,并在 3 种颜色之间绘制渐变。

第 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用来设置渐变的百分比吗?

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

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

4

1 回答 1

0

startPoint和属性是从 0 到 1 测量的endPoint,而不是在视图的坐标系中,这可能是您遇到的问题。因此,要从一侧到另一侧运行渐变,您需要像这样声明它。

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 页差不多,但这是一个考虑因素,因此您可能不得不回到原来的理论,即根据水平偏移调整颜色阵列。

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

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

在此处输入图像描述

于 2014-08-30T17:58:13.317 回答