2

一个普通的 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 数组,这使得动画代码非常容易出错)

4

1 回答 1

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]; 
于 2012-04-26T20:51:30.520 回答