我正在使用集合视图,并希望在用户调整时移动单元格。这是代码。
func longPressPhotoCollectionView(sender: UILongPressGestureRecognizer) {
guard isEditing else {
return
}
let point = sender.location(in: photoCollectionView)
switch sender.state {
case .began:
guard let indexPath = photoCollectionView.indexPathForItem(at: point) else {
return
}
let isS = photoCollectionView.beginInteractiveMovementForItem(at: indexPath)
print(isS)
case .changed:
photoCollectionView.updateInteractiveMovementTargetPosition(point)
case .ended:
photoCollectionView.endInteractiveMovement()
default:
photoCollectionView.cancelInteractiveMovement()
}
}
我怀疑自定义布局会导致此问题。我从Apple的Doc。
中找到了这个当您调用此方法时,集合视图会查询其委托以确保可以移动该项目。如果数据源不支持项的移动,则此方法返回false。
我不知道如何处理动画,尤其是自定义布局。请帮我!谢谢!
答案 0 :(得分:2)
在UICollectionViewDataSource中实现以下内容:
func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
print("MOVING!")
// Switch the Items in the DataSource
}
答案 1 :(得分:0)
调用此方法时,集合视图将咨询其委托以确保可以移动该项目。如果数据源不支持项目的移动,则此方法返回false。
Apple文档具有误导性。似乎暗示您应重写UICollectionViewDelegate
上的某些方法以使单元格可移动。实际上,它是一个UICollectionViewDataSource方法:
optional func collectionView(_ collectionView: UICollectionView,
canMoveItemAt indexPath: IndexPath) -> Bool
https://developer.apple.com/documentation/uikit/uicollectionviewdatasource/1618015-collectionview