UICollectionView编程指南说:
除了动画插入、删除和移动操作之外,您可以随时使布局无效并强制它重新绘制其内容。使布局无效不会直接为项目设置动画;当您使布局无效时,collection view 会在它们新计算的位置显示项目而不进行动画处理。但是,使布局无效的行为会导致布局对象显式移动项目。在自定义布局中,您可以使用此行为定期定位单元格并创建动画效果。
我一直在尝试这样的事情,AnimationStep
我的子类使用的枚举在哪里UICollectionViewFlowLayout
有条件地设置具有三阶段动画的图块的位置:
-(void)update{
[self animateLayoutAfterDelay:2.0 toStep:AnimationStepOne];
[self animateLayoutAfterDelay:4.0 toStep:AnimationStepTwo];
[self animateLayoutAfterDelay:6.0 toStep:AnimationStepThree];
}
-(void)animateLayoutAfterDelay:(NSTimeInterval)delay toStep:(MagazineLayoutAnimationStep)step {
double delayInSeconds = delay;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[UIView animateWithDuration:2.0 animations:^{
self.layout.animationStep = step;
[self.layout invalidateLayout];
}];
});
}
这具有相当不可预测的影响。有些单元格以我期望的方式动画,有些单元格被隐藏和显示,或者只是出现在它们的新位置。我在单元格上放置了随机背景颜色,以查看这是否可能是 UICollectionView 回收单元格的效果,果然,有时确实如此。这解释了一些奇怪的事情,但不是全部。
有人知道 Apple 希望我如何为单元格设置动画并移动它们吗?
(我需要这个,因为我的集合视图单元格往往会改变大小,并且我想要一个没有任何对角线移动的优美动画)。