使用CALayer动画UILabel不透明度?

时间:2011-02-22 15:12:32

标签: iphone objective-c cocoa-touch

我正在设置UILabel的alpha动画,以便在按下按钮时闪烁白色。标签是纯白色的[r255,g255,b255,a1]来实现闪光我将CALayer的不透明度设置为0.5到1.0,然后再回到0.5。执行此操作的代码:(感谢Dave DeLong的帮助)是:

UILabel *navTitle;
@property(nonatomic, retain) UILabel *navTitle;
...
...
@synthesize navTitle;

// ADD ANIMATION OBJECT
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
[anim setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[anim setFromValue:[NSNumber numberWithFloat:0.5]];
[anim setToValue:[NSNumber numberWithFloat:1.0]];
[anim setAutoreverses:YES];
[anim setDuration:0.5];
[[[self navTitle] layer] addAnimation:anim forKey:@"flash"];
[[self navTitle] setTag:1138];

当闪光灯被多次调用时(即每次按下按钮)我在下一次闪光之前调用removeAnimationForKey,我的问题是,这是正确的(即我从图层中移除动画的位置) )。如果我没有删除该层,我是否正确地假设它们会随着我添加越来越多而累积?

// REMOVE ANIMATION OBJECT
if([[self navTitle] tag] == 1138) {
    [[[self navTitle] layer] removeAnimationForKey:@"flash"];
    [[self navTitle] setTag:0];
}

NB :最初的想法是做一个恒定的脉冲(在NSTimer上),但在测试一个脉冲时,在UI上查看了更多的清洁。

编辑:

如果你试图为一个不存在的密钥调用removeAnimationForKey会发生什么,目前我在删除之前检查UILabel标签,我是否需要这样做?

1 个答案:

答案 0 :(得分:1)

我认为无论如何,它没有错,可能是框架以自己的方式完成它,但只要addAnimation方法是一个带有removeAnimation的对方法,就可以手动完成它。 / p>