Animation 核心动画:为什么我不能合成两个动画?

Animation 核心动画:为什么我不能合成两个动画?,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

我正在试着给轮子做动画

当手指静止>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 / 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,抱歉,从内存中写入该路径并出错。我更正了答案