2015-10-11 11 views
4

Я создал новый проект. Я связал QuartzCore.framework и импортировал <QuartzCore/QuartzCore.h> в ViewController.m.CAGradientLayer не работает

И вот код.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSLog(@"view height %f", self.view.frame.size.height); // returns 667 on iPhone 6 
    NSLog(@"view width %f", self.view.frame.size.width); // returns 375 on iPhone 6 

    NSLog(@"layers count %lu", self.view.layer.sublayers.count); // returns 2 

    // Gradient 
    UIColor *colorOne = [UIColor blueColor]; 
    UIColor *colorTwo = [UIColor greenColor]; 
    NSArray *colorArray = @[colorOne, colorTwo]; 

    NSNumber *locationOne = [NSNumber numberWithFloat:0.0]; 
    NSNumber *locationTwo = [NSNumber numberWithFloat:1.0]; 
    NSArray *locationArray = @[locationOne, locationTwo]; 

    CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
    gradientLayer.frame = self.view.frame; 
    gradientLayer.colors = colorArray; 
    gradientLayer.locations = locationArray; 

    [self.view.layer insertSublayer:gradientLayer atIndex:0]; 
    //[self.view.layer insertSublayer:gradientLayer above:[self.view.layer.sublayers firstObject]]; // didn't work either 

    NSLog(@"layers count %lu", self.view.layer.sublayers.count); //returns 3 
} 

Я попытался установить цвет фона мнение, чтобы clearColor, назвав его в viewDidAppear, но ни один из них не работал. Я действительно не знаю, чего мне не хватает. Спасибо в любой помощи.

ответ

17

Ваш цвет массив должен быть NSArray *colorArray = @[(id)colorOne.CGColor, (id)colorTwo.CGColor];, потому что colors массив занимает CGColorRef с, а не UIColor с, достаточно досадно - см the CGGradientLayer docs

+4

Раздражает часть не то, что CGColor нужен, но что использование UIColor вместо не вызывает никаких жалоба в консоли. Мне жаль, что у меня не было никеля за каждый раз, когда я совершил эту ошибку ... – matt

+0

Я полностью пропустил это! Рад, что я спросил. Спасибо :) – SFF

+0

@matt Точно! Приятно знать, что это не только я :) – SFF