Iphone UICollectionView动画(插入/删除项目)
我希望在插入和/或删除UICollectionViewCell时自定义动画样式 我需要这样做的原因是,默认情况下,我看到插入单元会使动画平滑淡入,而删除单元则会使动画向左移动+淡出。如果不是因为一个问题,我会非常高兴的 删除单元格后,在添加新单元格时仍会重复使用该单元格,而在重复使用该单元格时,不会使用默认的淡入效果,而是向左移动+淡入的组合 我不知道为什么我会在动画中出现这种不一致。如果这是一个已知的错误/问题/愚蠢(在我这边:),请让我知道如何修复它 否则,请让我知道如何在删除单元格时设置自定义动画(或将我指向教程) 谢谢 更新 通过子类化UICollectionViewFlowLayout并添加这行代码,修复了奇怪的动画行为Iphone UICollectionView动画(插入/删除项目),iphone,ios,objective-c,uicollectionview,uicollectionviewcell,Iphone,Ios,Objective C,Uicollectionview,Uicollectionviewcell,我希望在插入和/或删除UICollectionViewCell时自定义动画样式 我需要这样做的原因是,默认情况下,我看到插入单元会使动画平滑淡入,而删除单元则会使动画向左移动+淡出。如果不是因为一个问题,我会非常高兴的 删除单元格后,在添加新单元格时仍会重复使用该单元格,而在重复使用该单元格时,不会使用默认的淡入效果,而是向左移动+淡入的组合 我不知道为什么我会在动画中出现这种不一致。如果这是一个已知的错误/问题/愚蠢(在我这边:),请让我知道如何修复它 否则,请让我知道如何在删除单元格时设置自
- (UICollectionViewLayoutAttributes *) initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {
return nil;
}
就这样!:) 如果使用自己的
UICollectionViewLayout
子类,则可以实现以下方法:
用于插入InitialLayoutAttribute for AppearinGiteMatIndex路径:
用于删除FinallYoutAttributesForDisappearinGiteMatIndex路径:
框架,默认情况下,alpha
为1.0(由layouttributesforitematindexpath:
定义)。删除时,其属性将从删除前的当前状态设置为动画,由finalLayoutAttributesForDisappearingItemAtIndexPath:
设置的属性对应于相同的帧和0.0的alpha
。所以它不会移动,但会消失。但是,右边的单元格将被移到左边(因为它们的indexPath
已更改,因此它们的帧也将更改,如layouttributesforitematindexpath:
所设置的那样)
-(CGSize)集合视图内容大小
{
NSInteger numberOfItems=[self.collectionView numberOfItems部分:0];
返回CGSizeMake(numberOfItems*项目宽度、项目高度);
}
-(UICollectionViewLayoutAttributes*)layoutAttributesForItemAtIndexPath:(NSIndexPath*)indexPath
{
NSUInteger索引=[IndexXPath indexAtPosition:0];
UICollectionViewLayoutAttributes*属性=[UICollectionViewLayoutAttributes LayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
attributes.frame=CGRectMake(索引*项目宽度,0,项目宽度,项目高度);
返回属性;
}
-(NSArray*)布局属性ForElementsInRect:(CGRect)rect
{
NSMUTABLEARRY*属性=[NSMUTABLEARRY new];
NSUInteger firstIndex=地板(CGRectGetMinX(rect)/项目宽度);
NSUInteger lastIndex=ceilf(CGRectGetMaxX(rect)/项目宽度);
对于(nsuiger index=firstIndex;index下载。这是一个使用
initialLayoutAttributesForAppearingItemAtIndexPath:
finalLayoutAttributesForDisappearingItemAtIndexPath:
这对你来说将是一个很好的工作材料。谢谢纪尧姆。但是,你能给我一个具体的例子吗?假设我想确保我的单元格在被删除时会消失,我如何在我的自定义UICollectionViewLayout中实现它?我添加了一个例子来回答你的问题。根据文档,ini的结果tialLayoutAttributesForAppearingItemAtIndexPath
已为零。
initialLayoutAttributesForAppearingItemAtIndexPath:
finalLayoutAttributesForDisappearingItemAtIndexPath: