Остановить CABasicAnimation в определенной точке

Я использую анимацию вращения, созданную с помощью 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);
6
задан Thomas Clemensen 19 June 2012 в 12:41
поделиться