【问题标题】:How to set a color for CABasicAnimation?如何为 CABasicAnimation 设置颜色?
【发布时间】:2012-08-18 19:30:15
【问题描述】:

CABasicAnimation 有 toValue 属性,它需要一个 id。但是 Quartz Core 不能与 UIColor 一起使用,它需要一个 CGColor 结构来代替。如何为 CABasicAnimation 提供颜色?

【问题讨论】:

    标签: iphone ios ipad core-animation cabasicanimation


    【解决方案1】:

    只需提供CGColor 并将其类型转换为id

    UIColor *fromColor = [UIColor redColor];
    UIColor *toColor = [UIColor yellowColor];
    CABasicAnimation *colorAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
    colorAnimation.duration = 1.0;
    colorAnimation.fromValue = (id)fromColor.CGColor;
    colorAnimation.toValue = (id)toColor.CGColor;
    

    此示例在 1 秒内将背景颜色从红色渐变为黄色。

    另一个直接取自Apple's example code的例子:

    CAKeyframeAnimation* colorAnim = [CAKeyframeAnimation animationWithKeyPath:@"borderColor"];
    NSArray* colorValues = [NSArray arrayWithObjects:(id)[UIColor greenColor].CGColor,
                (id)[UIColor redColor].CGColor, (id)[UIColor blueColor].CGColor,  nil];
    colorAnim.values = colorValues;
    colorAnim.calculationMode = kCAAnimationPaced;
    

    【讨论】:

    • 抱歉有点迂腐但稍作修正... UIColor *fromColor = [UIColor redColor];和 UIColor *toColor = [UIColor yellowColor]; (注意星号)
    • fromValue 和 toValue 支持 UIColor,传递 CGColor 会导致崩溃。
    • @Andy 记录在哪里? Apple 自己似乎不知道这一点 - 检查来自 Core Animation Programming Guide 的示例代码“一起制作多个更改的动画”。
    • @Till,实际上你是对的,它不会插入 UIColors。
    • @Till 我将它用于自定义 UIColor 属性当然崩溃了,我猜是因为动画试图将 CGColorRef 分配给 UIColor 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2020-12-14
    • 1970-01-01
    • 2015-10-26
    • 2013-06-03
    • 2019-02-23
    • 2019-01-03
    相关资源
    最近更新 更多