向UIScrollView添加渐变

时间:2011-06-14 16:46:53

标签: iphone uiscrollview

我正在尝试添加渐变以淡入和淡出我的UIScrollView文本。我得到了添加CAGradientLayer的建议。我认为我会做这样的事情开始,并且只是覆盖整个事情而不是担心顶部和底部因为我是渐变和绘图的新手。我试过这个,但我不认为这是正确的,因为我的UIScrollView中的UILabel文本看起来没有变化。我是在正确的轨道上吗?感谢。

编辑:

    CAGradientLayer *gradient = [CAGradientLayer layer];
    CGColorRef darkColor = [[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.6] CGColor];
//    CGColorRef darkColor = [[self.scrollView.backgroundColor colorWithAlphaComponent:0.5] CGColor];
//    CGColorRef lightColor = [[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:0.6] CGColor];
    CGColorRef lightColor = [[self.scrollView.backgroundColor colorWithAlphaComponent:1.0] CGColor];
    CGRect gradientFrame = self.scrollView.bounds;
    gradientFrame.size.height = 50;
    gradient.frame = gradientFrame;
    gradient.colors = [NSArray arrayWithObjects: (id)darkColor, (id)lightColor, nil];
    [self.scrollView.layer addSublayer:gradient];

我尝试过几种不同的方法,使用不同的RGB,alpha值,我不能让它看起来正确,只是让文本淡出。我尝试使用alpha从0.0到1.0的backgroundColor,我没有看到任何变化。

1 个答案:

答案 0 :(得分:2)

如果将渐变添加到滚动视图,它将使用滚动视图滚动。将它添加到scrollview superview应该是技巧。

如果足够大,它仍然应该可见。

这对我有用:

+ (CAGradientLayer *)maskWithHorizontalFadingBordersWithinBounds:(CGRect)bounds
{
    CAGradientLayer * maskLayer = [CAGradientLayer layer];

    id outerColor = (id)[UIColor colorWithWhite:1.0 alpha:0.0].CGColor;
    id innerColor = (id)[UIColor colorWithWhite:1.0 alpha:1.0].CGColor;

    maskLayer.colors    = @[outerColor, innerColor, innerColor, outerColor];
    maskLayer.locations = @[@0.0      , @0.025    , @0.975    , @1.0];
    maskLayer.bounds = bounds;
    maskLayer.anchorPoint = CGPointZero;

    return maskLayer;
}

在适当的初始化程序中调用此方法,注意不要经常创建图层。

scrollViewsSuperView.layer.mask = [CAGradientLayer maskWithHorizontalFadingBordersWithinBounds:scrollView.bounds];

缺点:Scrollbars也会受到影响,我仍然更喜欢这个简单的解决方案。

备用:将屏蔽作为子图层添加到滚动视图本身,并在scrollViewDidScroll中将其位置重置为0.