0

我试图让我的 UIScrollView 的末端淡出 - 就像 UITableView 一样。我找到了下面的代码。我在 UIScrollView 子类中的一个名为 inside 的方法中使用它initWithFrame:...

if (!maskLayer)
{
    maskLayer = [CAGradientLayer layer];

    CGColorRef outerColor = [UIColor colorWithWhite:0 alpha:1.0].CGColor;
    CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor;

    maskLayer.colors = [NSArray arrayWithObjects:(__bridge id)outerColor,
                        (__bridge id)innerColor, (__bridge id)innerColor, (__bridge id)outerColor, nil];
    maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
                           [NSNumber numberWithFloat:0.2],
                           [NSNumber numberWithFloat:0.8],
                           [NSNumber numberWithFloat:1.0], nil];

    maskLayer.bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    maskLayer.anchorPoint = CGPointZero;
    CGColorRelease(outerColor);
    CGColorRelease(innerColor);
    self.layer.mask = maskLayer;
}

注意:我已经看过这个问题__bridge,但在我的颜色之前我已经有了。

我确信这是非常基本的东西,但我就是想不通。我添加了这些CGColorRelease行,希望能解决它,但它没有......

有没有人看到我没有看到的东西?

4

1 回答 1

1

假设您在 XIB 中设置滚动视图,请删除 if 语句并将代码放入子类中的 awakeFromNib 中。如果手动创建滚动视图对象,请在执行 inithWithFrame 后调用该代码。

此外,翻转 outerColor 和 innerColor 变量的 alpha 值。这是代码。

- (void) setGradient
{
    CAGradientLayer * maskLayer = [CAGradientLayer layer];

    // Flipped your alpha values around.
    CGColorRef outerColor = [UIColor colorWithWhite:0 alpha:0.0].CGColor;
    CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor;

    maskLayer.colors = [NSArray arrayWithObjects:(__bridge id)outerColor,
                        (__bridge id)innerColor, (__bridge id)innerColor, (__bridge id)outerColor, nil];
    maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
                           [NSNumber numberWithFloat:0.2],
                           [NSNumber numberWithFloat:0.8],
                           [NSNumber numberWithFloat:1.0], nil];

    maskLayer.bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    maskLayer.anchorPoint = CGPointZero;
    CGColorRelease(outerColor);
    CGColorRelease(innerColor);
    self.layer.mask = maskLayer;

}
- (void)awakeFromNib
{
    [self setGradient];
}
于 2013-04-26T04:52:52.027 回答