2017-08-02 43 views
0

我在UICollectionViewCells中放置了自定義的CABasicAnimation動畫。目的是每個單元格的動畫將在單元格出現在屏幕上時單獨觸發。我的方法是實現一個函數,在單元類上設置CABasicAnimation。我從控制器的willDisplayCell調用它。UICollectionViewCells中的CABasicAnimation結束屏幕外

此方法適用於所有重複使用的單元格。但是,最初爲控制器加載的所有單元格將立即(屏幕外)完成動畫,而不是根據動畫定時完成。什麼可能是這個問題?

// Cell 

-(void)animate { 
    [CATransaction begin]; { 
     // My timed animations (CABasicAnimation) 
    } [CATransaction commit]; 
} 

// Controller 

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { 
    [((CustomCell*)cell) animate]; 
} 
+0

您是否嘗試過在您的ViewDidAppear中使用collectionView reloadData?我認爲是更好的解決方案,少hacky,也是你的解決方案會延遲所有單元格動畫,請讓我知道,如果解決您的問題 –

回答

0

我能夠通過應用以下改變來解決這個問題。感覺像一個黑客,但至少它的作品。

// Controller 

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath { 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [((CustomCell*)cell) animate]; 
    }); 
} 
0

試試這個在您的Cell類:

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    // Initialization code 
    [self animate]; 
} 
+0

對不起,但這並沒有影響到有問題的問題,我不明白它可能有什麼。 – AntonBoer