iPhone开发中如何制作这种动画效果? Quartz 2d,Vore 动画?

Posted

技术标签:

【中文标题】iPhone开发中如何制作这种动画效果? Quartz 2d,Vore 动画?【英文标题】:How can I make this animation effect in iPhone development? Quartz2d, Core Animation? 【发布时间】:2013-05-27 02:21:29 【问题描述】:

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

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

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

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

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

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

谢谢大家:)

【问题讨论】:

【参考方案1】:

我会使用类似于我在下面写的内容。它会在 1.5 秒内增加您的帧数(当然,您可以更改持续时间)。我不确定你用什么样的物体来塑造你的形状。您可以使用 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 动画提供了一个很好的起点。


递增标签更新

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

在您的 .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];
    

【讨论】:

非常感谢。抱歉,我没有明确说明“增加文本”的问题。我的意思是文本中的数字随着 bar 的增长从 0 增长到 100。不是标签的位置。我认为这与形状无关,而与 label.text 值有关。我该怎么做?再次感谢罗格。 给我一点时间,我不知道该怎么做。启动 Xcode 来玩弄一些代码,我会在得到答案后立即更新我的帖子。 另外,在growNumbers 中设置框架和UIView 动画,使数字和条形增量同步。在每次调用时通过离散增量调整条形框架。 @Kedar,这是一个有趣的想法。 +1 @rog 很好的答案,你让我很开心!谢谢!!

以上是关于iPhone开发中如何制作这种动画效果? Quartz 2d,Vore 动画?的主要内容,如果未能解决你的问题,请参考以下文章

高级PPT动画制作示例

如何制作window移动的动画效果

想要获得像在 iphone 中打开相机快门一样的动画

iPhone:如何从左到右制作当前的模态视图控制器动画

如何为iphone中的图像提供动画看起来像花

教你如何在网页上用利用H5快速实现动画效果