Я исследовал, как анимации добавляются к слою 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]];
Я полагаю, UIAlertView
также выполняет простую анимацию непрозрачности от 0.0f
до 1.0f
в течение общей продолжительности анимации преобразования (0.4
).