【问题标题】:CABasicAnimation inside UICollectionViewCells finish offscreenUICollectionViewCells 中的 CABasicAnimation 在屏幕外完成
【发布时间】:2017-08-02 06:29:08
【问题描述】:

我在 UICollectionViewCells 中放置了自定义 CABasicAnimation 动画。目的是一旦单元格出现在屏幕上,每个单元格的动画将单独触发。我的方法是实现一个在单元类上设置 CABasicAnimation 的函数。我从控制器的 willDisplayCell 调用它。

这种方法适用于所有重复使用的单元格。但是,最初为控制器加载的所有单元格将立即完成动画(屏幕外),而不是根据动画时间。可能是什么问题?

// 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]; 
}

【问题讨论】:

  • 您是否尝试过在 ViewDidAppear 中使用 collectionView reloadData?我认为更好的解决方案和更少的hacky,您的解决方案也会延迟所有单元格动画,如果解决了您的问题,请告诉我

标签: ios objective-c uicollectionview core-animation


【解决方案1】:

在你的 Cell 类上试试这个:

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

【讨论】:

  • 抱歉,无论如何这并没有影响所讨论的问题,我看不出它会如何。
【解决方案2】:

我能够通过应用以下更改来解决此问题。感觉像是 hack,但至少它有效。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多