CGAffineTransformMakeRotation перед анимацией CABasic
Я выполняю вращение UIImageView на месте перед выполнением анимации вращения:
// rotate to the left by 90 degrees
someView.transform = CGAffineTransformMakeRotation((-0.5)*M_PI);
Затем вызывается вращение вида на 180 градусов... но кажется, что оно поворачивает изображение, начиная с исходного положения, как если бы оно не было первоначально повернуто.
- (void)rotateIndicatorToAngle: (UIView *)view angle: (NSNumber *)angleInDegrees
{
CALayer *layer = view.layer;
CGFloat duration = 5.0;
CGFloat radians = [self ConvertDegreesToRadians: [angleInDegrees floatValue]];
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: radians];
rotationAnimation.duration = duration;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 1.0;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseOut];
[layer addAnimation: rotationAnimation forKey: @"rotationAnimation"];
}
Что дает?
2 ответа
Решение
rotationAnimation.cumulative = YES;
Вы пытались использовать rotationAnimation.additive = YES;
вместо накопительного?
Вы можете использовать методы класса из UIView
чтобы легко оживить ваш взгляд:
[UIView beginAnimation: @"Rotate" context: nil];
[UIView setAnimationDuration: 5.0f];
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut];
CGFloat radians = [self ConvertDegreesToRadians: [angleInDegrees floatValue]];
view.transform = CGAffineTransformMakeRotation(radians);
[UIView commitAnimation];
Это то, что я использую большую часть времени, нет необходимости использовать слои.
ОБНОВЛЕНИЕ: я имею в виду, мне проще не использовать слои в этом случае, никакой уничижительной ценности при использовании слоев.