2011-08-28 86 views
1

我有一系列CALayers,我正在循环并尝试移动。移动CALayer的动画?

瓷砖是CALayer的子类,有一个的CGRect属性命名originalFrame其中i商店,我想动画的框架。

当我下面期运用一切代码瞬间移动到正确的possition并没有4秒的动画。我怎样才能使这些CALayer动画?

 for (int i = 0; i < [tileArray count]; i++) { 
      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
      [UIView setAnimationDelay:i]; 
      [UIView setAnimationDuration:4]; 
      Tile *currentCard = (Tile*)[tileArray objectAtIndex:i]; 
      currentCard.frame = currentCard.originalFrame; 
      [UIView commitAnimations]; 
     } 

回答

3

你有两个问题:第一个是你想层的frame直接动画。由于这是一个派生财产,你不能那样做。相反,你必须动画position属性。 http://developer.apple.com/library/mac/#qa/qa1620/_index.html

其次,你使用UIView的+beginAnimations API,但你说你的Tile对象是CALayers,而不是UIViews。所以你不需要使用+beginAnimations。相反,你需要使用CAAnimation对象,如CABasicAnimation(未经测试):

for (Tile *tile in tileArray) 
{ 
    static NSString * const kProperty = @"position"; 

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:kProperty]; 
    animation.duration = 4.0f; 
    animation.fromValue = [tile valueForKey:kProperty]; 
    animation.toValue = [NSValue valueWithCGRect:tile.originalFrame]; 
    [tile addAnimation:animation forKey:kProperty]; 
} 
+0

谢谢,exatcly我一直在寻找! – David