渐变颜色到自定义视图
Posted
技术标签:
【中文标题】渐变颜色到自定义视图【英文标题】:Gradient Color to Custom View 【发布时间】:2013-07-09 07:53:41 【问题描述】:我在 UIViewController
中创建了 3 个自定义视图。在每个自定义视图中,我都使用 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];
请帮帮我。
【问题讨论】:
【参考方案1】:渐变色应该是CGColor
:gradient.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];
顺便说一句,您忘记为渐变设置起点和终点。
【讨论】:
【参考方案2】:CALayer
及其子类采用 CGColor
,而不是 UIColor
。您可以通过访问CGColor
实例的CGColor
属性将UIColor
转换为Core Graphics 颜色结构CGColor
。
同样重要的是要理解: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:)
更受欢迎。
不要忘记设置自定义UIView
子类的layerClass
类方法。
【讨论】:
谁在没有评论的情况下对我投了反对票(特别是考虑到我的回答正确且非常详细)——这是粗鲁的,不是在 Stack Overflow 上的行为方式。如果没有描述性评论说明反对票的用途,任何人都不会从反对票中学习。以上是关于渐变颜色到自定义视图的主要内容,如果未能解决你的问题,请参考以下文章
如何将子视图添加到自定义 UICollectionViewCell