Mas*_*oud 37 objective-c ios6 uicollectionview uicollectionviewlayout
作为测试,我做了一个布局,在垂直线上显示单元格,另一个在水平布局中显示它们.当我把[collectionView setCollectionViewLayout:layout animated:YES];它称为两个位置之间的动画非常干净.
现在,我喜欢做的是有各方面的意见做了几个旋转,扭曲,最后到达目的地之前的屏幕(可能使用CAKeyframeAnimations)左右翻转,但我不能找到一个好地方挂钩这一点.
我尝试了子类化UICollectionViewLayoutAttributes以包含动画属性,然后applyLayoutAttributes:在UICollectionViewCell我正在使用的重写方法中设置这些动画.这可行...除了它似乎只在布局转换完成后才会发生.如果我想使用它,我必须让布局不要立即改变对象的当前位置,只有在它到达代码的这个apply属性部分之后,这似乎很多工作......
或者我可以继承UICollectionView和覆盖setCollectionViewLayout:animated:,但在布局之间看起来似乎也有很多状态.无论这些optins的似乎是正确的,因为有这样的动画细胞的添加/删除一个简单的方法中的布局.我觉得应该有类似的东西挂钩布局之间的动画.
有谁知道获得我想要完成的目标的最佳方法?
#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;
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |