在最简单的可能用例中,CAGradientLayer与“exc_bad_access”崩溃

时间:2012-04-26 20:47:46

标签: ios calayer cagradientlayer

一个普通的UIView子类,只有以下代码:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Initialization code

        CAGradientLayer* gradientLayer = [CAGradientLayer layer];
        gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil];
        gradientLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:1.0], nil];

        [self.layer addSublayer:gradientLayer];

    return self;
}

使用EXC_BAD_ACCESS杀死运行时(不,在你提出要求之前没有僵尸)。

此外,不是CAGradientLayer过度释放 - 在图层上放置多个浮动保留没有效果。

(顺便说一句,我从来没有见过CAGradientLayer实际工作,在我参与的任何项目上。我认为它已被诅咒:)。我不会使用它,除了我需要动画渐变,Apple的CGGradient类只支持const数组,这使动画代码容易出错)

1 个答案:

答案 0 :(得分:5)

问题可能在这里:

gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil];

这些颜色必须是核心图形等价物,所以这可能有用。

gradientLayer.colors = [NSArray arrayWithObjects:(__bridge id)[UIColor whiteColor].CGColor, (__bridge id)[UIColor blackColor].CGColor, nil];