2010-05-25 56 views
0

我在圖層中添加了CATransform3DMakeRotation。當我添加另一個刪除舊的?新的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"]; 

第二個重置視圖和後適用本身。我該如何解決??

回答

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)]; 

需要注意的是,如果一個動畫是陸續進行,您將需要使用委託回調一旦第一完成啓動第二。動畫是在後臺線程上執行的,因此如果上面定義的兩個動畫都是依次觸發的,結果可能會很糟糕。