Я использую анимацию вращения, созданную с помощью CABasicAnimation
. Он вращает UIView
за 2 секунды. Но мне нужно иметь возможность остановить его при касании UIView
. Если я удалю анимацию, вид будет в том же положении, что и до запуска анимации.
Вот мой код анимации:
float duration = 2.0;
float rotationAngle = rotationDirection * ang * speed * duration;
//rotationAngle = 3*(2*M_PI);//(double)rotationAngle % (double)(2*M_PI) ;
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: rotationAngle ];
rotationAnimation.duration = duration;
rotationAnimation.cumulative = YES;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.delegate = self;
[self.view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
Как я могу остановить вращение UIView
прямо там, где оно есть, когда его коснулись? Я знаю, как управлять сенсорной частью, но не могу понять, как остановить просмотр под текущим углом анимации.
Решение: Я решил проблему, получив угол слоя презентации, удалив анимацию и установив преобразование вида.Вот код:
[self.view.layer removeAllAnimations];
CALayer* presentLayer = self.view.layer.presentationLayer;
float currentAngle = [(NSNumber *)[presentLayer valueForKeyPath:@"transform.rotation.z"] floatValue];
self.view.transform = CGAffineTransformMakeRotation(currentAngle);