UICollectionViewCell的动画“崩溃”

时间:2015-11-17 12:50:11

标签: ios objective-c animation uicollectionview

我在第一个视图范围的单元格中有一个UICollectionView图像。现在,在进入动画后,图像必须从视线中消失。

我的第一个念头就是删除单元格。这个动画看起来就像我想要的那样。除了大量的代码取决于静态的单元格数量。也许事情应该从一开始就设计得与众不同。唉,现在为时已晚。

我的第二个想法是制作单元格的高度0.我根据this answer编写了一个动画,但我似乎无法让它工作。动画似乎是即时的,我不知道如何让其余的UICollectionView用它进行动画制作。

这是我现有的代码:

// version 1
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (self.needToClearImage) {
        self.needToClearImage = NO;
        void (^compressCell)() = ^() {
            [self.collectionViewGrid reloadData];
        };

        [UIView transitionWithView:cellToCompress duration:2.0f options:UIViewAnimationOptionCurveLinear animations:compressCell completion:nil];
     }
}

// version 2
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (self.needToClearImage) {
        self.needToClearImage = NO;
        UICollectionViewCell *cellToCompress = [self.collectionViewGrid cellForItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
        void (^compressCell)() = ^() {
            CGRect frame = cellToCompress.frame;
            frame.size = CGSizeMake(0, 0);
            cellToCompress.frame = frame;
        };

        [UIView transitionWithView:cellToCompress duration:2.0f options:UIViewAnimationOptionCurveLinear animations:compressCell completion:nil];
     }
}

// used in both versions
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    if ([indexPath row] == 0 && self.needToClearImage == NO) {
        return CGSizeMake(self.collectionViewGrid.frame.size.width, 0);
    }
    else {
        ...
    }
}

编辑:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (self.needToClearImage) {
        self.needToClearImage = NO;
        [self.collectionViewGrid performBatchUpdates:^{
        } completion:^(BOOL finished) {
        }];
    }
}

调用performBatchUpdates似乎可以动画更新UICollectionView。然而,它并不能激活图像的消失。

0 个答案:

没有答案