2012-07-05 55 views
4

我想在UITableViewCell裏面啓動一個動畫,但除非我做一些傻事,否則它不會啓動。代碼被調用,但動畫不會做任何事情。如果我把它放在dispatch_async之內,那麼它就會起作用。爲什麼會發生?爲了讓動畫開始,我需要等待什麼?UITableViewCell子視圖動畫時序怪異

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(mNeedsAnimation) 
    { 
    //this will delay it a bit and make it work, but why? 
    //dispatch_async(dispatch_get_main_queue(), ^(void){ (
     mViewToAnimate.transform = CGAffineTransformMakeScale(0.5f, 0.5f); 
     mViewToAnimate.hidden = NO; 
     mViewToAnimate.alpha = 1.f; 

     [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionRepeat|UIViewAnimationCurveLinear animations:^{ 
      mViewToAnimate.alpha = 0.0; 
      mViewToAnimate.transform = CGAffineTransformMakeScale(1.f, 1.f); 
     }completion:nil]; 
    //}); 
     mNeedsAnimation = NO; 
    } 
} 

回答

2

我想這是因爲當willDisplayCell被稱爲細胞仍然是屏幕外,不能有一個動畫。

+0

我以爲像這樣...但如果是這樣的話,那麼這段代碼是如此脆弱。你知道任何會提醒我這個事實,即這個單元格在屏幕上,準備好接收動畫嗎? – borrrden

+0

也許mViewToAnimate.superview – Rich86man

+0

也是界限 – Rich86man