代码之家  ›  专栏  ›  技术社区  ›  Undo ptrk

CAGradientLayer给出EXC_BAD_ACCESS?

  •  0
  • Undo ptrk  · 技术社区  · 11 年前

    我正试图让UIScrollView的结尾淡出——就像UITableView一样。我找到了下面的代码。我正在一个内部调用的方法中的UIScrollView子类中使用它 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;
    }
    

    注意:我已经看过了 this question ,但我已经有了 __bridge 在我的颜色之前。

    我确信这是非常基本的东西,但我就是搞不清楚。我添加了 CGColorRelease 希望能解决问题,但没有。。。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Darren Reely    11 年前

    假设您在XIB中设置滚动视图,则删除if语句,并将代码放入子类中的wakeFromNib中。如果手动创建滚动视图对象,请在执行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];
    }