模仿UIAlertView Bounce?

Mik*_*uss 15 iphone cocoa-touch core-animation uikit ios

什么是模仿iPhone上UIAlertView的弹跳动画的最佳方式?这有一些内置机制吗?UIAlertView本身不适合我的需求.

我查看了动画曲线,但据我所知,他们提供的只有easeIn,easeOut和linear.

Ort*_*ntz 62

UIAlertView使用更复杂的动画:

  • 规模大于100%
  • 规模小于100%
  • 规模达到100%

这是一个使用的实现CAKeyFrameAnimation:

view.alpha = 0;
[UIView animateWithDuration:0.1 animations:^{view.alpha = 1.0;}];

CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
bounceAnimation.values = @[@0.01f, @1.1f, @0.8f, @1.0f];
bounceAnimation.keyTimes = @[@0.0f, @0.5f, @0.75f, @1.0f];
bounceAnimation.duration = 0.4;
[view.layer addAnimation:bounceAnimation forKey:@"bounce"];
Run Code Online (Sandbox Code Playgroud)


CIF*_*ter 30

我调查了如何UIAlertView通过调配将动画添加到图层中-[CALayer addAnimation:forKey:].以下是我为其执行的缩放变换动画获得的值:

0.01f -> 1.10f -> 0.90f -> 1.00f

持续时间

0.2s, 0.1s, 0.1s.

所有动画都使用缓入/缓出计时功能.这是一个CAKeyframeAnimation封装这个逻辑:

CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
bounceAnimation.fillMode = kCAFillModeBoth;
bounceAnimation.removedOnCompletion = YES;
bounceAnimation.duration = 0.4;
bounceAnimation.values = @[
    [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.01f, 0.01f, 0.01f)],
    [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.1f, 1.1f, 1.1f)],
    [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9f, 0.9f, 0.9f)],
    [NSValue valueWithCATransform3D:CATransform3DIdentity]];
bounceAnimation.keyTimes = @[@0.0f, @0.5f, @0.75f, @1.0f];
bounceAnimation.timingFunctions = @[
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
Run Code Online (Sandbox Code Playgroud)

相信UIAlertView也从执行简单的不透明度的动画0.0f,以1.0f在所述变换动画的总持续时间(0.4).


ken*_*ytm 3

您可以使用 2 种动画,一种弹出到非常大,另一种重新缩放回正常大小。

(这是内部使用的方法UIAlertView。)

或者,您可以使用较低级别CAAnimation并使用+[CAMediaTimingFunction functionWithControlPoints::::]来制作自己的曲线。