gpt4 book ai didi

objective-c - 从一个 UICollectionViewLayout 切换到另一个时的自定义动画?

转载 作者:IT老高 更新时间:2023-10-28 11:48:24 29 4
gpt4 key购买 nike

作为测试,我制作了一种布局,以垂直线显示单元格,另一种以水平布局显示单元格。当我调用 [collectionView setCollectionViewLayout:layout animated:YES]; 时,它会非常干净地在两个位置之间进行动画处理。

现在我希望 让所有 View 在最终到达目的地之前在屏幕上进行几次旋转、扭曲和翻转(可能使用 CAKeyframeAnimations),但我可以'找不到好地方挂这个。

我尝试子类化 UICollectionViewLayoutAttributes 以包含动画属性,然后将这些动画设置在 UICollectionViewCell 的重写 applyLayoutAttributes: 方法中使用。这行得通...除了它似乎只发生在布局转换完成之后。如果我想使用它,我必须让布局不要立即更改对象的当前位置,只有在它到达代码的这个应用属性部分之后,这似乎需要做很多工作......

或者我可以继承 UICollectionView 并覆盖 setCollectionViewLayout:animated:,但这似乎也需要在布局之间保留很多状态。这些选项似乎都不正确,因为有这样的 一种简单的方法来动画添加/删除单元格 布局。我觉得应该有类似的东西可以连接到 between 布局的动画中。

有谁知道获得我想要完成的任务的最佳方法?

最佳答案

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

关于objective-c - 从一个 UICollectionViewLayout 切换到另一个时的自定义动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866079/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com