我正在制作一个钟摆,它从0度摆动到最大200度,然后再回来。问题是,如果钟摆超过180度,它将通过最短路径返回到0,顺时针方向继续。而且我希望它逆时针走。这是我的代码: ('right'是一个布尔值,当钟摆从左向右摆动时为TRUE)
- (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谢谢!
迈克尔
答案 0 :(得分:8)
要让它逆时针走,只需将x
设置为负值(添加 - 在前面)
你想要的地方
rotationAnimation.toValue = [NSNumber numberWithFloat:degreesToRadians(x)];
答案 1 :(得分:2)
尝试设置类似
的内容rotationAnimation.valueFunction = [CAValueFunction functionWithName:kCAValueFunctionRotateZ];
使用值变换函数,动画可以使用每个组件的任意变换(不归一化到360°)来影响图层的变换属性,并且在一次应用多个动画时正常连接。
使用值转换函数,通过创建指定kCAValueFunctionRotateZ的CAValueTransform函数,然后创建一个fromValue为0,值为M_PI的动画,并设置动画的动画,绕z轴旋转0°到180° value将属性转换为值转换实例。
答案 2 :(得分:1)
我认为你必须使用这段代码:
[rotationAnimation.byValue = [NSNumber numberWithFloat:degreesToRadians(kMax/2))];
[rotationAnimation.toValue = [NSNumber numberWithFloat:degreesToRadians(kMin)];
答案 3 :(得分:0)
我不确定问题是什么,但是如果你使用动画的自动反转功能,你可以简化这个并使它来回旋转(摆动)。这对我有用:
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];