2012-08-15 69 views
2

我有一个使用CAKeyframeAnimation从空到满的饮用水杯动画。动画效果非常好。如何将UILabel文本中的更改与相关动画同步?

我需要用与玻璃的充满度相对应的百分比来更新UILabel,即它在动画开始时将读取“0%”,当它结束时将读取“100%”。

关键帧动画运行5秒钟。我没有看到更新此标签的好方法。我可以考虑两种选择:

  1. 启动另一个线程并运行轮询类型的循环,以处理能力为代价更新文本。
  2. 将动画分解为100个部分并使用CABasicAnimation更新文本,然后继续下一个玻璃动画。

有没有更好的方法来做到这一点?提前

感谢

+0

我还记得_some_ WWDC视频中的一个或者两个年前做了一些类似的事情,但我不记得哪一个......他们的演示应用程序做了像植物一样的东西。希望有人记得我正在谈论哪一个。 – 2012-08-15 11:36:42

+0

感谢您的帮助 - 我搜索了2011年和2010年的WWDC会议,但没有找到关于植物的任何内容。我会继续寻找! – 2012-08-16 07:20:51

回答

0

您可以使用一个的NSTimer或dispatch_after()块的一些计划的时间间隔来更新标签:

// assume an ivar "NSTimer *myTimer" and "int count", initially 0 

// fires 20 times, so update is 0.05 
myTimer = NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES 

- (void)updateLabel:(NSTimer *)timer 
{ 
    ++count; 
    if(count >= 20) { 
    [timer invalidate]; 
    } 
    CGFloat percent += 0.05; 
    myLabel.text = [NSString stringWithFormat:... 
} 
+0

谢谢!我忘记了NSTimer。我希望它能在动画持续时间缩短的情况下起作用,文档说它仅在每秒10-20次调用时才可靠。但我认为它对5秒钟的当前使用情况会很好。 – 2012-08-15 16:21:14

+1

如果你经常更新标签,人们将很难阅读标签 - 玩弄并获得你喜欢的效果。如果你对这个答案感到满意,如果你点击它旁边的支票图标以便接受它(如果你不知道,我们可以得到一个被接受的答案的积分),这将是非常棒的。 – 2012-08-15 16:23:46

+0

我同意,并且我已经将其设置为100ms间隔,其中代码根据经过时间确定当前百分比,而不是根据NSTimer预定选择器的呼叫数量,因此它对间隙或快速呼叫不是很敏感。它看起来很好,很可能是因为CA也在动画大小的变化,使其更新非常顺利:) – 2012-08-16 07:26:33