CAGradientLayer 不工作[重复]

Posted

技术标签:

【中文标题】CAGradientLayer 不工作[重复]【英文标题】:CAGradientLayer not working [duplicate] 【发布时间】:2015-10-11 01:19:29 【问题描述】:

我创建了一个新项目。我链接了QuartzCore.framework 并在ViewController.m 中导入了<QuartzCore/QuartzCore.h>

这是代码。

- (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 中调用它,但它们都不起作用。我真的不知道我错过了什么。感谢您的帮助。

【问题讨论】:

【参考方案1】:

您的颜色数组应该是NSArray *colorArray = @[(id)colorOne.CGColor, (id)colorTwo.CGColor];,因为colors 数组需要CGColorRefs,而不是UIColors,这很烦人 - 请参阅the CGGradientLayer docs

【讨论】:

令人讨厌的部分不是需要 CGColor,而是使用 UIColor 不会在控制台中引起任何抱怨。我希望我每次犯这个错误都能得到一个五分钱...... 我完全错过了!很高兴我问。谢谢你:) @matt 没错!很高兴知道这不仅仅是我:) 哇!从没想过他们不会注意到我们。好收获 一个ooolllld问题...

以上是关于CAGradientLayer 不工作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

CAGradientLayer 无法正常工作

在两个 CAGradientLayer 颜色设置之间连续渐变?

CAGradientLayer 导致子视图不可见

添加 CAGradientLayer 子层时,UITableViewCell 不拾取 UITableViewCellSelectionStyleBlue

CAGradientLayer 位置不正确

CAGradientLayer 不改变背景颜色