CATextLayer 的动画foregroundColor 属性

Posted

技术标签:

【中文标题】CATextLayer 的动画foregroundColor 属性【英文标题】:Animating foregroundColor property of CATextLayer 【发布时间】:2011-02-27 19:49:15 【问题描述】:

我想对 iPhone 上 CATextLayer 的文本颜色(前景颜色)的变化进行动画处理。根据文档,该属性的隐式动画在 OSX 10.6 上不可用,但没有提及 ios。因此,我只是假设动画必须是显式的才能在 iOS 上运行。

我已使用+(class)layerClass 更改了支持层类,并在 UIView init 方法中为属性设置了初始值。文本显示得很好,以及我应用的所有属性(阴影、字体等),但动画没有任何影响。

下面是我的动画方法,我从一个 KVO 观察方法中调用它,以便当观察到的属性发生变化时,视图会提醒用户。

-(void) animateTextChange
    animation = [CABasicAnimation animationWithKeyPath:@"foregroundColor"];

    [animation setFromValue:[[UIColor blackColor] CGColor]];

    [animation setToValue:[[UIColor whiteColor] CGColor]];

    [animation setDuration:2.0f];

    [[self layer] addAnimation:animation
                        forKey:@"foregroundColor"
 ];

一如既往的感谢。

【问题讨论】:

【参考方案1】:

这是我成功做到这一点的唯一方法:

       [CATransaction begin];
       [CATransaction setAnimationDuration:.5];
       [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
       [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
        yellowWord.foregroundColor =[UIColor redColor].CGColor;
        [CATransaction commit];

希望对大家有所帮助

【讨论】:

我非常希望这能奏效,但它在 iOS9 上对我不起作用 在我将setValue:... 线切换为CATransaction.disableActions() 后,它确实工作了

以上是关于CATextLayer 的动画foregroundColor 属性的主要内容,如果未能解决你的问题,请参考以下文章

Choppy CATextLayer 动画:fontSize + position 同时

自动布局和 CATextLayer iOS7

如何为 NSAttributedString 设置动画?

iOS之CATextLayer属性简介

将 UITextLayer 文本设置为 CATextLayer?

尝试使用 CAAnimation 和 CATextLayer 滑动文本