Я анимирую маятник, который поворачивается от 0 градусов до максимум 200 градусов, а затем снова возвращается. Проблема в том, что если маятник поворачивается на 180 градусов, он возвращается к 0 по кратчайшему маршруту, который должен продолжаться по часовой стрелке. И я бы хотел, чтобы это было против часовой стрелки. Вот мой код: анимация маятника, который колеблется от 0 градусов до максимум 200 градусов, а затем снова возвращается. Проблема в том, что если маятник поворачивается на 180 градусов, он возвращается к 0 по кратчайшему пути, который ...
Я анимирую маятник, который поворачивается от 0 градусов до максимум 200 градусов, а затем снова возвращается. Проблема в том, что если маятник поворачивается на 180 градусов, он возвращается к 0 по кратчайшему маршруту, который должен продолжаться по часовой стрелке. И я бы хотел, чтобы это было против часовой стрелки. Вот мой код: анимация маятника, который колеблется от 0 градусов до максимум 200 градусов, а затем снова возвращается. Проблема в том, что если маятник поворачивается на 180 градусов, он возвращается к 0 по кратчайшему пути, который ...
Я анимирую маятник, который поворачивается от 0 градусов до максимум 200 градусов, а затем снова возвращается. Проблема в том, что если маятник поворачивается на 180 градусов, он возвращается к 0 по кратчайшему маршруту, который должен продолжаться по часовой стрелке. И я бы хотел, чтобы это было против часовой стрелки. Вот мой код: он возвращается к 0 по кратчайшему маршруту, который должен продолжаться по часовой стрелке. И я бы хотел, чтобы это было против часовой стрелки. Вот мой код: он возвращается к 0 по кратчайшему маршруту, который должен продолжаться по часовой стрелке. И я бы хотел, чтобы это было против часовой стрелки. Вот мой код: ('right' - это логическое значение, которое ИСТИНА, когда маятник качается слева направо).
- (void)swingPendulum {
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
if (right)
rotationAnimation.toValue = [NSNumber numberWithFloat:degreesToRadians(kMax)];
else
rotationAnimation.toValue = [NSNumber numberWithFloat:degreesToRadians(kMin)];
rotationAnimation.duration = 1.0;
rotationAnimation.repeatCount = 1.0;
rotationAnimation.delegate = self;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
rotationAnimation.removedOnCompletion = NO;
[pendulum.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}
Есть идеи, как я могу заставить эту работу работать? Это последний кусочек моей головоломки со свингометром, который отлично работает: D Спасибо!
Майкл
Попробуйте установить что-то вроде
rotationAnimation.valueFunction = [CAValueFunction functionWithName:kCAValueFunctionRotateZ];
. Используя функции преобразования значений, анимация может влиять на свойство преобразования слоя с использованием произвольных преобразований каждый компонент (без нормализации на 360 °) и объединяются, как правило, при одновременном применении нескольких анимаций.
Вы используете функцию преобразования значений, которая вращается от 0 ° до 180 ° вокруг оси z, создавая функцию CAValueTransform, определяющую kCAValueFunctionRotateZ, а затем создавая анимацию с fromValue, равным 0, toValue, равным M_PI, и устанавливая анимацию. valueTransform в экземпляр преобразования значения.
Я не совсем уверен, что проблема в том, но если вы используете функцию автоматического реверса анимации, вы, вероятно, можете упростить ее и заставить ее вращаться (качаться) вперед и назад. У меня это работает:
CABasicAnimation* rotationAnimation =
[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
[rotationAnimation setToValue:[NSNumber numberWithFloat:DegreesToRadians(200.0)]];
[rotationAnimation setDuration:1.0];
[rotationAnimation setRepeatCount:HUGE_VALF]; // Repeat forever
[rotationAnimation setAutoreverses:YES]; // Return to starting point
[[pendulum layer] addAnimation:rotationAnimation forKey:nil];