1

我想做的是一个动画不断增长的条形图,并且文本(数字)也随着条形图长度的值而增长。看起来像:

在此处输入图像描述

条应该水平增长,带有数字的文本也应该增长。并且用户可能希望通过点击“重播”再次播放动画。

在阅读了苹果编程指南和一些很棒的教程之后,我有了一个大概的想法。使用 Quartz2d,我可以绘制条形图和垂直线,以及文本。但是Quartz2d没有动画效果。使用 Core Animation,我可以通过时间和指定的属性值来改变条的形状。我说得对吗?

所以我想我想要的是结合 Quartz2d 和 Core Animation,先用 Quartz2d 画条,然后用 CA 动画它?这是正确的方法吗?或者,如果有其他可用的轻量级解决方案,我将不胜感激。

PS:我对iPhone绘图很陌生,据我所知,做动画最轻的方法是UIView动画,更轻的是CALayer动画。整个绘图工作都是由 Quartz2d 完成的,对吗?即使在我阅读了这篇文章之后,它也有点令人困惑。但实际上,我不会(或不能)对整个图形系统过于概念化。但是在写了一些关于这个的实际代码之后,我肯定会继续挖掘。

所以,现在,我只需要知道这是否是实现这种动画效果的最佳方式。

多谢你们 :)

4

1 回答 1

2

我会使用类似于我在下面写的内容。它会在 1.5 秒内增加您的帧数(当然,您可以更改持续时间)。我不确定你用什么样的物体来塑造你的形状。您可以只使用 a 之类的东西UIView并将其设置backgroundColor为您想要的任何内容。

// calculate your new frame - not sure what your parameters are as you've not explained it in your question.
CGRect newFrame = CGRectMake(10, 10, 300, 40);  // arbitrary values to demonstrate process... 

[UIView animateWithDuration:1.5 animations:^{
    // grow your rect (assuming yourShape is a UIView)
    yourShape.frame = newFrame;
    yourLabel.center = CGPointMake(newFrame.size.width - yourLabel.frame.size.width, yourLabel.center.y)
} completion:^(BOOL finished) {
    // do anything here that needs to occur after..

}];

不确定“增加文本”(增加文本或增加字体大小)究竟是什么意思,所以我给出了一个示例,将文本保持在水平条的末尾(右侧)。UIView这应该为试验动画提供了一个很好的起点。


递增标签更新

您需要使用 anNSTimer来增加标签。试试这个代码。

在你的 .h

int maxNum;
NSTimer *numTimer;

在你的 .m

用它来开始你的计数。你可能想把它放在你的UIView动画之前。

maxNum = 100;  // make this whatever number you need..
// you can change the TimeInterval to whatever you want..
numTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(growNumbers:) userInfo:nil repeats:YES];

这是计时器每次触发时调用的选择器(每 0.03 秒):

- (void)growNumbers:(id)sender {
    int i = self.numberLabel.text.intValue;
    if (i >= maxNum) {
        [numTimer invalidate];
        maxNum = 0;
    } else {
        i++;
        self.numberLabel.text = [NSString stringWithFormat:@"%i",i];
    }
}
于 2013-05-27T02:51:43.443 回答