新的CATransform3DMakeRotation删除旧的转换?

时间:2010-05-25 10:54:02

标签: iphone cocoa-touch core-animation

我在图层中添加了CATransform3DMakeRotation。当我添加另一个它删除旧的?

第一个:

[UIView beginAnimations:@"rotaty" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self]; 
CGAffineTransform transform = CGAffineTransformMakeRotation(-3.14);
kuvert.transform = CGAffineTransformRotate(transform, DegreesToRadians(134));
kuvert.center = CGPointMake(kuvert.center.x-70, kuvert.center.y+100);
[UIView commitAnimations];

和第二个:

CABasicAnimation *topAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
topAnim.duration=1;
topAnim.repeatCount=0;
topAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(0.0, 0, 0, 0)];
float f = DegreesToRadians(180);  // -M_PI/1;
topAnim.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(f, 0,1, 0)];
topAnim.delegate = self;
topAnim.removedOnCompletion = NO;
topAnim.fillMode = kCAFillModeBoth;
[topAnim setValue:@"flippy" forKey:@"AnimationName"];
[[KuvertLasche layer] addAnimation:topAnim forKey:@"flippy"];

第二个重置视图并在此之后自我应用。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

是的,CATransform3DMakeRotation()将创建一个全新的转换,覆盖现有的转换。如果要修改现有转换,则应使用CATransform3DRotate()。例如,您可以使用

行修改第二个代码示例
CATransform3D existingTransform = [[KuvertLasche layer] transform];
topAnim.fromValue = [NSValue valueWithCATransform3D:existingTransform];
float f = DegreesToRadians(180);  // -M_PI/1;
topAnim.toValue=[NSValue valueWithCATransform3D:CATransform3DRotate(existingTransform, f, 0,1, 0)];

请注意,如果要逐个执行一个动画,则需要使用委托回调来在第一个动画完成后启动第二个动画。动画是在后台线程上执行的,所以如果上面定义的两个动画一个接一个地被触发,结果可能会很乱。