Animation 核心动画:为什么我不能合成两个动画?
我正在试着给轮子做动画 当手指静止>0.1s时,滚轮“弹出”,即我将缩放比例从1.0设置为1.2 当手指移动时,轮子会随之旋转(仅当手指弹出时) 但我遇到了一个问题:一旦它开始旋转,比例就会降回1.0Animation 核心动画:为什么我不能合成两个动画?,animation,ios,core-animation,Animation,Ios,Core Animation,我正在试着给轮子做动画 当手指静止>0.1s时,滚轮“弹出”,即我将缩放比例从1.0设置为1.2 当手指移动时,轮子会随之旋转(仅当手指弹出时) 但我遇到了一个问题:一旦它开始旋转,比例就会降回1.0 - (void) spin: (Direction) direction { float thetaOld = thetaWheel; float k = (direction == AntiClockwise) ? -1 : 1; float t = 2 * M_PI * ( k / 1
- (void) spin: (Direction) direction
{
float thetaOld = thetaWheel;
float k = (direction == AntiClockwise) ? -1 : 1;
float t = 2 * M_PI * ( k / 12.0 );
thetaWheel += t;
CABasicAnimation * anim = [CABasicAnimation animationWithKeyPath:@"transform"];
anim.fromValue = [NSNumber numberWithDouble: thetaOld];
anim.toValue = [NSNumber numberWithDouble: thetaWheel];
anim.valueFunction = [CAValueFunction functionWithName: kCAValueFunctionRotateZ];
anim.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
anim.duration = 0.1f;
anim.fillMode = kCAFillModeForwards;
anim.removedOnCompletion = NO;
[self.wheelLayer addAnimation: anim forKey:@"transform"];
}
- (void) popOut
{
CABasicAnimation * anim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
anim.fromValue = [NSNumber numberWithDouble: 1.0];
anim.toValue = [NSNumber numberWithDouble: 1.2];
anim.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
anim.duration = 0.25f;
anim.fillMode = kCAFillModeForwards;
anim.removedOnCompletion = NO;
[self.wheelLayer addAnimation: anim forKey:@"transform.scale"];
}
// doesnt get used yet
- (void) popBack
{
CABasicAnimation * anim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
anim.fromValue = [NSNumber numberWithDouble: 1.2];
anim.toValue = [NSNumber numberWithDouble: 1.0];
anim.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
anim.duration = 0.1f;
anim.fillMode = kCAFillModeForwards;
anim.removedOnCompletion = NO;
[self.wheelLayer addAnimation: anim forKey:@"transform.scale"];
}
最后一个例行程序此时无法使用!所以我看不出是什么把比例缩小到1
看起来第二个动画正在覆盖第一个
如何正确执行此操作?我猜(尚未测试)在“变换”关键路径的动画中应用的层变换会覆盖在缩放动画中应用的变换
对于旋转,请尝试将动画与
transform.rotation.z
keypath一起使用(在这种情况下,您不需要设置valueFunction)非常有用,谢谢!注意:需要transform.rotation.z,transform.rotate.z将无法register@Ohmu,抱歉,从内存中写入该路径并出错。我更正了答案