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 2

1 ответ:

Проблема может быть здесь:

gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil];
Эти цвета должны быть основными графическими эквивалентами, чтобы это могло сработать.
gradientLayer.colors = [NSArray arrayWithObjects:(__bridge id)[UIColor whiteColor].CGColor, (__bridge id)[UIColor blackColor].CGColor, nil];