一切正常,除了在插入/删除项目期间属性的zIndex属性似乎被忽略.
适当的细胞:
插入一些细胞后:
这是我自定义插入/删除动画的实现.我的猜测是问题出在这些方法的某个地方.
overrIDe func initialLayoutAttributesForAppearingItemAtIndexPath(itemIndexPath: NSIndexPath) -> UICollectionVIEwLayoutAttributes? { let attributes = layoutAttributesForItemAtIndexPath(itemIndexPath) for updateItem in updateItems { switch updateItem.updateAction { case .Insert: if updateItem.indexPathAfterUpdate == itemIndexPath { let translation = collectionVIEw!.bounds.height attributes?.transform = CGAffinetransformMakeTranslation(0,translation) break } default: break } } return attributes}overrIDe func finalLayoutAttributesFordisappearingItemAtIndexPath(itemIndexPath: NSIndexPath) -> UICollectionVIEwLayoutAttributes? { for updateItem in updateItems { switch updateItem.updateAction { case .Delete: if updateItem.indexPathBeforeUpdate == itemIndexPath { let attributes = layoutAttributesForItemAtIndexPath(itemIndexPath) let translation = collectionVIEw!.bounds.height attributes?.transform = CGAffinetransformMakeTranslation(0,translation) return attributes } case .Move: if updateItem.indexPathBeforeUpdate == itemIndexPath { return layoutAttributesForItemAtIndexPath(updateItem.indexPathAfterUpdate!) } default: break } } let finalindex = finalindexForIndexPath(itemIndexPath) let shiftedindexPath = NSIndexPath(forItem: finalindex,inSection: itemIndexPath.section) return layoutAttributesForItemAtIndexPath(shiftedindexPath)}private func finalindexForIndexPath(indexPath: NSIndexPath) -> Int { var newIndex = indexPath.item for updateItem in updateItems { switch updateItem.updateAction { case .Insert: if updateItem.indexPathAfterUpdate!.item <= newIndex { newIndex += 1 } case .Delete: if updateItem.indexPathBeforeUpdate!.item < newIndex { newIndex -= 1 } case .Move: if updateItem.indexPathBeforeUpdate!.item < newIndex { newIndex -= 1 } if updateItem.indexPathAfterUpdate!.item <= newIndex { newIndex += 1 } default: break } } return newIndex}
我试过的事情:
>将initialLayoutAttributes …方法中的zIndex设置为最终的值.
>在动画之后手动对集合视图进行重新排序(非常Hacky,我想避免这种情况,因为它有时会导致一些奇怪的行为).
>调用super.initialLayoutAttributes …等并修改从中返回的属性.问题在于,当插入新单元时,它不处理其他单元移位;相反,细胞淡入淡出.
该项目的一个小型复制品可以在my GitHub找到.随意克隆它并玩它.
解决方法 我怀疑,似乎集合视图在动画期间没有正确应用布局属性.幸运的是,UICollectionVIEwCell提供了一种实现自定义布局属性的方法:overrIDe func applyLayoutAttributes(layoutAttributes: UICollectionVIEwLayoutAttributes) { layer.zposition = CGfloat(layoutAttributes.zIndex)}
添加上面的代码会导致插入的单元格出现在正确的zIndex上.
我将记录雷达并通过链接发表评论.
总结以上是内存溢出为你收集整理的ios – 具有重叠单元格和自定义插入和删除动画的UICollectionView全部内容,希望文章能够帮你解决ios – 具有重叠单元格和自定义插入和删除动画的UICollectionView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)