从一个 UICollectionViewLayout 切换到另一个时的自定义动画?
Posted
技术标签:
【中文标题】从一个 UICollectionViewLayout 切换到另一个时的自定义动画?【英文标题】:Custom animation when switching from one UICollectionViewLayout to another? 【发布时间】:2013-02-14 00:53:33 【问题描述】:作为测试,我制作了一种布局,以垂直线显示单元格,另一种以水平布局显示单元格。当我调用[collectionView setCollectionViewLayout:layout animated:YES];
时,它在两个位置之间的动画非常干净。
现在我希望 让所有视图在最终到达目的地之前在屏幕上进行几次旋转、扭曲和翻转(可能使用 CAKeyframeAnimations),但我可以'找不到好地方挂这个。
我尝试将UICollectionViewLayoutAttributes
子类化以包含动画属性,然后将这些动画设置在我正在使用的UICollectionViewCell
的覆盖applyLayoutAttributes:
方法中。这行得通...除了它似乎只发生在布局转换完成之后。如果我想使用它,我必须让布局不要立即更改对象的当前位置,只有在它到达代码的这个应用属性部分之后,这似乎需要做很多工作......
或者我可以继承 UICollectionView
并覆盖 setCollectionViewLayout:animated:
,但这似乎也需要在布局之间保留很多状态。这些选项似乎都不正确,因为有这样的 一种简单的方法来动画添加/删除单元格内 布局。我觉得应该有类似的东西可以连接到 between 布局的动画中。
有谁知道获得我想要完成的任务的最佳方法?
【问题讨论】:
你能展示你的代码吗? 【参考方案1】:#define degreesToRadians(x) (M_PI * (x) / 180.0)
UICollectionView *collectionView = self.viewController.collectionView;
HorizontalCollectionViewLayout *horizontalLayout = [HorizontalCollectionViewLayout new];
NSTimeInterval duration = 2;
[collectionView.visibleCells enumerateObjectsUsingBlock:^(UICollectionViewCell *cell, NSUInteger index, BOOL *stop)
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotationAnimation.toValue = @(degreesToRadians(360));
rotationAnimation.duration = duration;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[cell.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
];
[UIView animateWithDuration:duration
animations:^
collectionView.collectionViewLayout = horizontalLayout;
];
【讨论】:
以上是关于从一个 UICollectionViewLayout 切换到另一个时的自定义动画?的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView(3x3 Grid)与静态单元格分页
尽管宽度相等,但集合视图网格最后一行的显示方式不同 - swift iOS
为啥 docker 必须从 dockerfile 创建一个镜像,然后从该镜像创建一个容器,而不是从 Dockerfile 创建一个容器?