2013-07-09 114 views
0

我已创建3个自定义视图UIViewController中。在每个自定义视图中,我使用CAShapeLayer创建了形状。渐变色到自定义视图

这些图层还包含渐变色。现在我想为自定义视图设置渐变颜色。当我试图做到这一点时,它正在崩溃。对于第一视图,这里是代码:

//first component 
    self.aTimeScaleMonthView = [[TimeScaleView alloc] initWithFrame:CGRectMake(ORIGIN_X, frame.origin.y, frame.size.width-(2*ORIGIN_X), HEIGHT_OF_COMPONENT1) withStartDate:startDate endDate:endDate]; 
    self.aTimeScaleMonthView.modeOfScale = A3TimeScaleMonth; 
    self.aTimeScaleMonthView.layer.borderColor = [UIColor blackColor].CGColor; 
    self.aTimeScaleMonthView.layer.borderWidth = BORDER_WIDTH_BOX; 

    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = self.aTimeScaleMonthView.bounds; 
    gradient.colors = [NSArray arrayWithObjects:[UIColor colorWithRed:0.66 green:0.29 blue:0.22 alpha:1.0], [UIColor colorWithRed:0.62 green:0.51 blue:0.314 alpha:1.0], nil]; 

    [self.aTimeScaleMonthView.layer insertSublayer:gradient atIndex:0]; 
    [self addSubview: self.aTimeScaleMonthView]; 

请帮助我。

回答

2

渐变的颜色应该是CGColorgradient.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithRed:0.66 green:0.29 blue:0.22 alpha:1.0].CGColor, (id)[UIColor colorWithRed:0.62 green:0.51 blue:0.314 alpha:1.0].CGColor, nil];

顺便说一句,你忘了为您的渐变的起点和终点。

+0

很酷...其工作正常 – user007

0

CALayer及其小类取CGColor而不是UIColor。您可以通过访问UIColor实例的CGColor属性将UIColor转换为核心图形颜色结构CGColor

而且重要的是要明白:的CoreFoundation结构&那些与相关的C的API,如CoreGraphics中(任何与CG开始有关CoreGraphics中)不能插入NSArray直出,因为它们不是面向对象的。您必须将结构投射到id以将其放入NSArray实例中。你在你想投射的类型周围使用parens来投射Objective-C。在这种情况下,你会做到以下几点:

gradient.colors = @[(id)[UIColor colorWithRed:0.66 green:0.29 blue:0.22 alpha:1.0].CGColor, (id)[UIColor colorWithRed:0.62 green:0.51 blue:0.314 alpha:1.0].CGColor]; 

为了使你的代码更具可读性和你的颜色可重复使用的,你应该指定颜色,描述性的变量,并添加这些变量到NSArray的在他们的地方。

如果您想要一个向上和向下的渐变梯度,则不需要设置startPointendPoint。这是最常见的所需配置,因此是默认配置。此外,如果使用对象文字语法进行数组创建,则优先于@selector(arrayWithObjects:)

不要忘记设置您自定义UIView子类的layerClass类方法。

+0

无论谁低估我没有评论(特别是给予我的答案正确和高度详细) - 这是粗鲁的,而不是在堆栈溢出行为的方式。没有人从没有描述性评论的downvote中学到什么是downvote。 –