有没有办法改变UICollectionViews的动画速度?

时间:2012-09-22 20:44:00

标签: uitableview ios6 uicollectionview

我说的是insertItemsAtIndexPathsmoveItemAtIndexPath:toIndexPath:之类的内容。我已经尝试将其包装在动画块中,但这不起作用。似乎动画停留在.25或.3秒,但我想放慢速度。除了自己实施这个不值得麻烦的运动之外,有没有人知道公共API是否可以实现这一点?

2 个答案:

答案 0 :(得分:6)

绝对!但是你无法使用UIView动画块正确地完成它。你需要深入研究核心动画。

集合视图有助于为支持每个CALayer的{​​{1}}添加动画。但是,如果您实现自己的布局(或现有的子类),您可以在UICollectionViewCell方法中对这些动画进行所有必要的修改。

来自finalizeCollectionViewUpdates课程文档:

  

集合视图将此方法称为在将任何更改设置为动画之前的最后一步。

以下是如何使用您自己的替换默认位置动画的示例:

UICollectionViewLayout

查看- (void)finalizeCollectionViewUpdates { for (UICollectionViewCell *cell in [self.collectionView visibleCells]) { CAAnimation *positionAnimation = [cell.layer animationForKey:@"position"]; if (positionAnimation) { [cell.layer removeAnimationForKey:@"position"]; CALayer *presentationLayer = cell.layer.presentationLayer; CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; [animation setFromValue:[NSValue valueWithCGPoint:presentationLayer.position]]; [animation setToValue:[NSValue valueWithCGPoint:cell.layer.position]]; [animation setDuration:0.4]; [cell.layer addAnimation:animation forKey:@"position"]; } } } 上与动画相关的方法,了解如何深入了解当前在图层上运行的动画。

使用此方法,您甚至可以使用CALayer或您能想到的任何其他内容来获得创意并添加过冲/反弹效果。您还可以选择性地禁用某些动画(如大小)并保留其他动画(如位置)。

答案 1 :(得分:1)

从此处复制此内容:https://stackoverflow.com/a/18392148/1751266

您可以使用CALayer更改任何动画速度。因此,对于UICollectionView,它看起来如下所示:

[self.collectionView.viewForBaselineLayout.layer setSpeed:0.1f];

你可以改回原来的速度:

[self.collectionView.viewForBaselineLayout.layer setSpeed:1.0f];

为此,您可能需要导入QuartzCore:

#import <QuartzCore/QuartzCore.h>

请记住,它会影响同一层上的任何其他动画,包括动画UIImageViews等,因此它们可能需要补偿。