无法在 ios 中降低动画速度
unable to slow down animation speed in ios
我想在动画即将结束时放慢动画速度。
我正在检查这段代码。
[CATransaction begin];
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.byValue = [NSNumber numberWithFloat:20];
rotationAnimation.duration = 2;
rotationAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[CATransaction setCompletionBlock:^{
imageView.transform = CGAffineTransformRotate(imageView.transform, DEGREES_TO_RADIANS(myAngle*32.72));
}];
[imageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction commit];
但是在快结束或者完成的时候无法减速
尝试使用 kCAMediaTimingFunctionEaseOut
而不是 kCAMediaTimingFunctionEaseIn
rotationAnimation.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseOut];
kCAMediaTimingFunctionEaseIn
指定缓入节奏。缓入节奏导致动画开始缓慢,然后随着它的进行而加速。
kCAMediaTimingFunctionEaseOut
指定缓出步调。缓出节奏会导致动画快速开始,然后在完成时变慢。
您也可以更改 rotationAnimation.duration
以完全减慢动画速度。
rotationAnimation.duration = 10
您还可以从以下 link 中了解有关缓动函数及其行为方式的更多信息。
http://easings.net
正如我在@rakeshbs 的评论中提到的,我想在特定角度停止动画,所以我通过以下方式修改了这段代码。
[CATransaction begin];
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.byValue = [NSNumber numberWithFloat:20];
rotationAnimation.duration = 2;
rotationAnimation.fromValue = 0;
rotationAnimation.toValue = [NSNumber numberWithFloat:SomeValue];
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
[ImageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction commit];
通过这段代码,我可以通过 fromValue
停在特定位置,并通过 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
控制开始和结束的速度
在动画中间,如果我想提高动画速度,我需要增加 rotationAnimation.byValue
的值,如果降低速度,我需要降低相同的值。
在这里我想提一下,通过这个方法,如果我想一次旋转 MyImageView 360 度,那么我需要设置 rotationAnimation.toValue = [NSNumber numberWithFloat:6.25];
.
我想在动画即将结束时放慢动画速度。
我正在检查这段代码。
[CATransaction begin];
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.byValue = [NSNumber numberWithFloat:20];
rotationAnimation.duration = 2;
rotationAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[CATransaction setCompletionBlock:^{
imageView.transform = CGAffineTransformRotate(imageView.transform, DEGREES_TO_RADIANS(myAngle*32.72));
}];
[imageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction commit];
但是在快结束或者完成的时候无法减速
尝试使用 kCAMediaTimingFunctionEaseOut
而不是 kCAMediaTimingFunctionEaseIn
rotationAnimation.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseOut];
kCAMediaTimingFunctionEaseIn
指定缓入节奏。缓入节奏导致动画开始缓慢,然后随着它的进行而加速。
kCAMediaTimingFunctionEaseOut
指定缓出步调。缓出节奏会导致动画快速开始,然后在完成时变慢。
您也可以更改 rotationAnimation.duration
以完全减慢动画速度。
rotationAnimation.duration = 10
您还可以从以下 link 中了解有关缓动函数及其行为方式的更多信息。 http://easings.net
正如我在@rakeshbs 的评论中提到的,我想在特定角度停止动画,所以我通过以下方式修改了这段代码。
[CATransaction begin];
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.byValue = [NSNumber numberWithFloat:20];
rotationAnimation.duration = 2;
rotationAnimation.fromValue = 0;
rotationAnimation.toValue = [NSNumber numberWithFloat:SomeValue];
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
[ImageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction commit];
通过这段代码,我可以通过 fromValue
停在特定位置,并通过 [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
在动画中间,如果我想提高动画速度,我需要增加 rotationAnimation.byValue
的值,如果降低速度,我需要降低相同的值。
在这里我想提一下,通过这个方法,如果我想一次旋转 MyImageView 360 度,那么我需要设置 rotationAnimation.toValue = [NSNumber numberWithFloat:6.25];
.