如何在动画时更改CALayer的颜色

时间:2017-02-02 16:34:54

标签: ios objective-c calayer

我有一个圆弧绕圈并改变颜色三次。我在SO上使用了一个示例来启动我:Change CALayer color while animating

此示例有效,但颜色为红色,然后是绿色,然后是蓝色。我希望他们是绿色,橙色,然后是红色。我试图弄清楚他在代码中是如何改变颜色的,这让我很困惑:

for (NSUInteger i = 0; i < 3; i++)
        {
            CAShapeLayer* strokePart = [[CAShapeLayer alloc] init];
            strokePart.fillColor = [[UIColor clearColor] CGColor];
            strokePart.frame = tutorialCircle.bounds;
            strokePart.path = tutorialCircle.path;
            strokePart.lineCap = tutorialCircle.lineCap;
            strokePart.lineWidth = tutorialCircle.lineWidth;

            // These could come from an array or whatever, this is just easy...
            strokePart.strokeColor = [[UIColor colorWithHue: i * portion saturation:1 brightness:1 alpha:1] CGColor];

所以我相信这条线正在改变颜色:

strokePart.strokeColor = [[UIColor colorWithHue: i * portion saturation:1 brightness:1 alpha:1] CGColor];

我的目标是将这些颜色操作为绿橙红而不是红绿和蓝。

由于

编辑:

这是部分的值:

const double portion = 1.0 / ((double)3);

2 个答案:

答案 0 :(得分:2)

HUE-Color系统以360度的角度定义颜色,其中0为红色,108(360 * 0,3)为绿色且为蓝色。这就是颜色的生成方式:

strokePart.strokeColor = [[UIColor colorWithHue: 0 saturation:1 brightness:1 alpha:1] CGColor]; // RED

strokePart.strokeColor = [[UIColor colorWithHue: 0.3 saturation:1 brightness:1 alpha:1] CGColor]; // GREEN

strokePart.strokeColor = [[UIColor colorWithHue: 0.6 saturation:1 brightness:1 alpha:1] CGColor]; // BLUE

如果要更改为颜色,可以将该部分移动一些其他值:

strokePart.strokeColor = [[UIColor colorWithHue: 0.3 + portion saturation:1 brightness:1 alpha:1] CGColor];

或者你可以用你想要经历的颜色定义一个数组:

NSArray* colors = @[ UIColor.green, UIColor.orange, UIColor.red ];
for (id color in colors)
    {
        CAShapeLayer* strokePart = [[CAShapeLayer alloc] init];
        strokePart.fillColor = [[UIColor clearColor] CGColor];
        strokePart.frame = tutorialCircle.bounds;
        strokePart.path = tutorialCircle.path;
        strokePart.lineCap = tutorialCircle.lineCap;
        strokePart.lineWidth = tutorialCircle.lineWidth;

        // These could come from an array or whatever, this is just easy...
        strokePart.strokeColor = [color CGColor];

答案 1 :(得分:1)

啊我刚才弄清楚了。以下是答案:

---
has-cart: true
---