UICollectionViewCells 中的 CABasicAnimation 在屏幕外完成
Posted
技术标签:
【中文标题】UICollectionViewCells 中的 CABasicAnimation 在屏幕外完成【英文标题】:CABasicAnimation inside UICollectionViewCells finish offscreen 【发布时间】: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,您的解决方案也会延迟所有单元格动画,如果解决了您的问题,请告诉我 【参考方案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];
);
【讨论】:
以上是关于UICollectionViewCells 中的 CABasicAnimation 在屏幕外完成的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewCells 中的 CABasicAnimation 在屏幕外完成
UICollectionViewCells 中的 UIPickerViews 中的 3 个 UILabel 之间不需要的交互
你如何垂直对齐 UICollectionView 中的 UICollectionViewCells?
水平滚动时如何左对齐 UICollectionViewCells?