0

我在. _ 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];

请帮我。

4

2 回答 2

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];

顺便说一句,您忘记为渐变设置起点和终点。

于 2013-07-09T08:03:22.767 回答
0

CALayer及其子类采取CGColor,不是UIColor。您可以通过访问实例的属性将 aUIColor转换为 Core Graphics 颜色结构。CGColorCGColorUIColor

同样重要的是要理解:CoreFoundation 结构和相关 C API 的结构,例如 CoreGraphics(任何以 CG 开头的都与 CoreGraphics 相关)不能直接插入NSArray,因为它们不是面向对象的。您必须将结构转换为id以将其放置在NSArray实例中。您在 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 中。

如果您想要的是直线向上和向下渐变startPoint,则不需要设置。endPoint这是最常见的所需配置,因此是默认配置。此外,今天使用对象字面量语法创建数组比@selector(arrayWithObjects:).

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

于 2013-07-09T08:12:10.373 回答