2011-02-18 143 views
0

我试图让我的计时器在游戏中还剩下不到10秒时闪烁红色。出于某种原因,动画不起作用。 timeLabel只是变成白色并保持这种状态。这里是我正在使用的代码:UIView动画块无法正常工作

if (timeLeft <= 9 && timeLeft > 0) { 
    timeLabel.textColor = [UIColor redColor]; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationDelegate:self]; 
    timeLabel.textColor = [UIColor whiteColor]; 
    [UIView commitAnimations]; 
} 

奇怪的是,我在另一个完全相同的应用程序中使用完全相同的代码块。也许我在我的班级某处有另一个动画,正在干扰这个动画?

回答

5

文字颜色不是一个动画的属性。您可以尝试使用CATextLayer来代替。

另一种选择是拥有一个相同的UILabel,红色文本位于白色UILabel之上,并从透明到不透明和背面淡入淡出。这看起来像这样:

if (timeLeft <= 9 && timeLeft > 0) { 
    redTimeLabel.alpha = 0; 
    [UIView animateWithDuration:1 
        animations:^{ 
         redTimeLabel.alpha = 1; 
        } 
        completion:^(BOOL finished){ 
         redTimeLabel.alpha = 0; 
        }]; 
} 
+0

这是一个很好的解决方案。谢谢! – thenameisnick 2011-02-21 18:56:39

0

看起来像你对我已经忘记

[UIView setAnimationDidStopSelector: 
       @selector(animationFinished:finished:context:)]; 

另外,如果您已经发布运行在主循环块,你检查动画是否已经发生?像一些redBlinkingDidStart布尔或什么的......以防万一:P