2017-08-02 5 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を試しましたか?私はより良い解決策とより少ないハッキーだと思います、あなたの解決策はすべての細胞のアニメーションを遅らせるでしょう、あなたが問題を解決するかどうかを教えてください –

答えて

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

あなたのセルクラスでこれを試してみてください:

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

申し訳ありませんが、これは問題の問題にはとにかく影響しませんでした。 – AntonBoer

関連する問題