我有一个集合视图,其布局由 UICollectionViewFlowLayout 实例管理。我有一个长按手势识别器附加到集合视图,其工作是检测是否在集合视图中的一个单元格的范围内发生长按,如果是,则在动画更改单元格的变换后删除该单元格。
这是手势识别器执行的操作的相关部分:
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];
[UIView animateWithDuration:2.0 animations:^{
cell.layer.transform = CATransform3DMakeScale(1.0, 0.0, 1.0); // an example animation - squish the cell vertically
} completion:^(BOOL fin) {
//[cell.layer removeAllAnimations];
[self.model.numb3rs removeObjectAtIndex:[indexPath row]]; // update model
[self.collectionView deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]]; // delete item
}];
问题是删除方法似乎在单元格上执行自己的属性更改/动画,这与我的动画效果不佳。例如,在我试图在这里实现的效果中,一旦单元格完全垂直压扁,我希望它不会再次显示在视图中,但是 deleteItemsAtIndexPaths: 调用会导致单元格的“幽灵”出现然后随着方法执行自己的变换和不透明动画而淡出。
我完全错误地接近它吗?可能集合视图架构提供了一种更好的方法来做我想做的事,而不是像我尝试的那样明确地为单元格设置动画然后删除它?
我希望我能在这里得到一个快速的答案,而不是深入研究文档。