UICollectionView如何使用自定义动画更改布局

3

我有两个collectionViewLayout,分别是verticalFlowLayout和fullScreenHorizontalFlowLayout。

@implementation VerticalFlowLayout
- (instancetype)init
{
    if (self = [super init]) {
        self.sectionInset = UIEdgeInsetsMake(12, 0, 0, 0);
        self.minimumLineSpacing = 10;
        self.minimumInteritemSpacing = 0;
        self.itemSize = CGSizeMake(CGRectGetWidth([UIScreen mainScreen].bounds), 244);
    }
    return self;
}
@end

@implementation FullScreenFlowLayout
- (instancetype)init
{
    if (self = [super init]) {
        self.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
        self.minimumLineSpacing = 10;
        self.minimumInteritemSpacing = 0;
        self.itemSize = CGSizeMake(CGRectGetWidth([UIScreen mainScreen].bounds), CGRectGetHeight([UIScreen mainScreen].bounds));
        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    }
    return self;
}

当我选择一个单元格时,我想通过自定义动画更改collectionView布局。默认动画是线性动画,持续时间为0.33。

    - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    if ([_collectionView.collectionViewLayout isKindOfClass:[FullScreenFlowLayout class]]) {
        VerticalFlowLayout *flowLayout = [VerticalFlowLayout new];
        [_collectionView setCollectionViewLayout:flowLayout animated:YES completion:^(BOOL finished) {

        }];
    }
    else
        [_collectionView setCollectionViewLayout:[FullScreenFlowLayout new] animated:YES];

}

我该如何做到这一点?

1个回答

5
只需将_collectionView.collectionViewFlowLayout = flowLayout放在一个UIView动画块中即可。
[UIView animateWithDuration:5.0 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{
    self.collectionView.collectionViewLayout = flowLayout;
} completion:^(BOOL finished) {
    if (finished) {
        // Do Something
    }
}];

5
这是一个完整的指南,介绍如何自定义集合视图布局动画:https://github.com/cnoon/CollectionViewAnimations。 - Hashem Aboonajmi
2
我认为你做得非常棒,从最初的询问如何实现,到创建了一个文档完备的GitHub仓库供其他人参考。干得好! - Colin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接