CGAffineTransformMakeRotation перед CABasicAnimation

Я выполняю вращение 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"];
}

Что дает?


person Brian Liang    schedule 19.10.2010    source источник
comment
привет, я пытаюсь использовать ваш код, но после вызова этого метода мой UIView перемещается в верхний левый угол моего супервизора, а затем center.x и y становятся отрицательными значениями. Почему?   -  person Dima Deplov    schedule 11.11.2013


Ответы (2)


rotationAnimation.cumulative = YES;

Вы пробовали использовать rotationAnimation.additive = YES; вместо кумулятивного?

person jv42    schedule 19.10.2010

Вы можете использовать методы класса из 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];

Это то, что я использую чаще всего, нет необходимости использовать слои.

ОБНОВЛЕНИЕ: я имею в виду, что в этом случае мне легче не использовать слои, без уничижительного значения при использовании слоев.

person jv42    schedule 19.10.2010
comment
спасибо за совет, но не решение моей проблемы. Я в основном пытаюсь понять, почему мой пример терпит неудачу. - person Brian Liang; 19.10.2010
comment
Хорошо, см. Мой комментарий в другом ответе за идею. - person jv42; 19.10.2010