Я пытаюсь оживить движение маятника, который начинается в положении «6 часов», затем поворачивается несколько раз, а затем снова останавливается в положении «6 часов».
Я уже знаю, как изменить опорную точку слоя и как ее повернуть.
У меня есть метод, чтобы вращать слой.
- (void)spinLayer:(CALayer *)inLayer duration:(CFTimeInterval)inDuration direction:(int)direction forPartsOfPi:(float) degrees withReverse:(bool) reverse andRepeatCount:(float) repeatCount;
Я подумал, что было бы лучше разделить движение маятника на 3 "колебания". Первый поворот - из стартовой позиции, скажем, в 9 часов. Поэтому я впервые вызываю Метод.
[self spinLayer:layer duration:0.4 direction:SPIN_CLOCK_WISE forPartsOfPi:M_PI/2 withReverse:NO andRepeatCount:0];
Затем, в animationDidFinish Delegate, я вызываю метод еще раз, чтобы позволить ему сделать несколько колебаний.
Поскольку вращение Маятника теперь вдвое больше длины первого свинга, я звоню:
[self spinLayer:layer duration:0.8 direction:SPIN_COUNTERCLOCK_WISE forPartsOfPi:M_PI withReverse:YES andRepeatCount:4];
после этого я хочу, чтобы маятник вернулся в положение 6 часов, поэтому я звоню:
[self spinLayer:layer duration:0.4 direction:SPIN_COUNTERCLOCK_WISE forPartsOfPi:M_PI/2 withReverse:NO andRepeatCount:0];
Вот реализация моего Метода:
- (void)spinLayer:(CALayer *)inLayer duration:(CFTimeInterval)inDuration direction:(int)direction forPartsOfPi:(float) degrees withReverse:(bool) reverse andRepeatCount:(float) repeatCount
{
CABasicAnimation* rotationAnimation;
// Rotate about the z axis
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
// Rotate 180 degress, in direction specified
rotationAnimation.toValue = [NSNumber numberWithFloat: degrees * direction];
// Perform the rotation over this many seconds
rotationAnimation.duration = inDuration;
rotationAnimation.autoreverses = reverse;
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.removedOnCompletion = FALSE;
rotationAnimation.repeatCount = repeatCount;
rotationAnimation.delegate = self;
// Set the pacing of the animation
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
// Add animation to the layer and make it so
[inLayer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}
Таким образом, проблема в том, что второе колебание начинается не в конце первого, а в положении «6 часов».
Кто-нибудь может объяснить мне, как это сделать?
Спасибо заранее
Мав