我在第一个视图范围的单元格中有一个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
。然而,它并不能激活图像的消失。