2010-08-10 52 views
2

我想打一个弹性弹出动画(在iPhone谷歌地图应用程序,有点像弹出)弹性动画 - 它背后

有谁知道的数学公式是什么样子一个想法数学做一个弹性动画?我尝试过,但想不出公式或如何去做。

以下是我心目中的内容:(控件或某物)在达到合适尺寸时停止增长,但弹性变形然后停止,开始增长,更快,更快。

任何想法,建议,它不一定是特别的那种方式。非常感谢!

回答

5

这是一个弹出式动画,你看到了,虽然我还没有完全复制它。我已经使用CAKeyframeAnimation来到这个最接近的是以下几点:

CAKeyframeAnimation *boundsOvershootAnimation = [CAKeyframeAnimation animationWithKeyPath:@"bounds.size"]; 
CGSize startingSize = CGSizeZero; 
CGSize overshootSize = CGSizeMake(targetSize.width * (1.0f + POPINOVERSHOOTPERCENTAGE), targetSize.height * (1.0f + POPINOVERSHOOTPERCENTAGE)); 
CGSize undershootSize = CGSizeMake(targetSize.width * (1.0f - POPINOVERSHOOTPERCENTAGE), targetSize.height * (1.0f - POPINOVERSHOOTPERCENTAGE)); 
NSArray *boundsValues = [NSArray arrayWithObjects:[NSValue valueWithCGSize:startingSize], 
         [NSValue valueWithCGSize:overshootSize], 
         [NSValue valueWithCGSize:undershootSize], 
         [NSValue valueWithCGSize:targetSize], nil]; 
[boundsOvershootAnimation setValues:boundsValues]; 

NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], 
        [NSNumber numberWithFloat:0.5f], 
        [NSNumber numberWithFloat:0.9f], 
        [NSNumber numberWithFloat:1.0f], nil];  
[boundsOvershootAnimation setKeyTimes:times]; 


NSArray *timingFunctions = [NSArray arrayWithObjects:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut], 
          [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
          [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 
          nil]; 
[boundsOvershootAnimation setTimingFunctions:timingFunctions]; 
boundsOvershootAnimation.fillMode = kCAFillModeForwards; 
boundsOvershootAnimation.removedOnCompletion = NO; 

[layer addAnimation:boundsOvershootAnimation forKey:@"boundsOvershoot"]; 

其中POPINOVERSHOOTPERCENTAGE大约是0.1。

放大图层(可能是UIView的背景图层),超过一定的百分比,缩小一点,然后下降一点,然后结束最终大小。

它接近Google地图注释的作用,但不完全相同。我认为对时间进行一些微小的调整可能会做到。

+0

在UIImageView上效果很好 - 谢谢。尝试在UIButton上,它似乎从右下角而不是中心增长。 – roocell 2012-11-02 00:41:26

2

使用Core Animation可以很容易地完成这个任务,并且不需要任何数学 - 呃,除了增加,减少或除法以调整位置大小外,没有其他任何东西。

您可以创建一个CAKeyFrameAnimation,将尺寸从0(或其他)增加到比它应该大一些的尺寸,然后缩小到比它应该小的尺寸,然后最终缩放到其预期的尺寸。

这会给你放大,缩小和实际大小的影响。