Swift 使用自定义UICollectionViewLayout无缝移动隐藏的UICollectionViewCell
我实现了一种自定义机制,使用Swift 使用自定义UICollectionViewLayout无缝移动隐藏的UICollectionViewCell,swift,uicollectionview,uicollectionviewcell,uicollectionviewlayout,Swift,Uicollectionview,Uicollectionviewcell,Uicollectionviewlayout,我实现了一种自定义机制,使用uilongpressurerecognizer在UICollectionView中拖放来执行重新排序 我有一个非常简单的习惯。 我的布局类不是的子类 下面是它的样子: 当我开始提升单元格开始拖动时,我会更新自定义布局对象中的dropProposalIndexPath属性,以便它知道需要隐藏哪个单元格 我的自定义UICollectionViewLayout子类返回一个UICollectionViewLayoutAttributes,对应于dropProposalIn
uilongpressurerecognizer
在UICollectionView
中拖放来执行重新排序
我有一个非常简单的习惯。我的布局类不是的子类 下面是它的样子: 当我开始提升单元格开始拖动时,我会更新自定义布局对象中的
dropProposalIndexPath
属性,以便它知道需要隐藏哪个单元格
我的自定义UICollectionViewLayout
子类返回一个UICollectionViewLayoutAttributes
,对应于dropProposalIndexPath
的单元格的alpha
属性设置为0,如下所示:
如果self.dropProposalIndexPath==indexPath{
ItemLayoutAttribute.alpha=0
}
它使提升的单元格隐藏,从而在UICollectionView
中创建一个“孔”
当用户移动其手指时,我更新我的自定义UICollectionViewLayout
子类的dropProposalIndexPath
属性并使其布局无效,然后移动在新索引处用作孔的单元格:
//将dropProposal的indexPath通知布局
self.reorderablellayout?.dropProposalIndexPath=dropProposalIndexPath
//移动单元格
collectionView.moveItem(位于:DragginIndexPath,至:dropProposalIndexPath)
下面是它的外观:
很糟糕吧
我在一个演示项目中使用UICollectionViewFlowLayout
的子类实现了完全相同的逻辑,并且过渡是无缝的:
我猜我做错了什么,或者忘记在我的UICollectionViewLayout
子类中做什么了
如果需要,我可以发布更多代码
请注意,使用内置拖放机制(iOS 11引入)执行重新排序不是一个选项,出于各种原因,我希望使用自定义实现。如果有人遇到相同问题,解决方案是在
UICollectionViewLayout
子类中实现以下方法:
func InitialLayoutAttribute for AppearinGitem(位于:IndexPath)->UICollectionViewLayoutAttribute?
然后,如果itemIndexPath
参数与拖动单元格的indexPath匹配,则在initiallayouttributesforappearingitem
函数中返回uicollectionviewlayouttributes
,并将alpha
属性设置为0