我正在用Swift Xcode8.3.2创建一个屏幕,上面有一个水平滚动的UICollectionView,上面只有一排图片。问题是,我认为“自动重新排序”功能是UICollectionView的一部分,而实际上它只在UICollectionViewController中实现。因为我只想滚动屏幕的一部分,所以我不相信我可以使用集合视图控制器--在这种情况下,集合视图总是全屏的,对吧?有了这个控制器,我发现了installsStandardGestureForInteractiveMovement
,它可以自动实现手势识别器。
我希望在我的集合视图中具有相同的功能,它位于UIViewController上。然而,我不知道我需要捕获哪些手势来实现单元格的重新排序。是否有任何拖动重新排序的“魔术”内置于集合视图本身?有没有一种方法,我可以使用控制器,而不是全屏显示集合视图?
我已经实现了以下方法来执行数据的实际移动,但我不确定要设置哪个手势识别器。
func collectionView(_ collectionView: UICollectionView,
moveItemAt sourceIndexPath: IndexPath,
to destinationIndexPath: IndexPath) {
let cellToMove = promoPages.remove(at: (sourceIndexPath as NSIndexPath).row)
promoPages.insert(cellToMove, at: (destinationIndexPath as NSIndexPath).row)
}
发布于 2018-05-28 10:06:05
读取this guide并将其转换为Swift3后:
对于UIViewController
类:
override func viewDidLoad() {
super.viewDidLoad()
let g = UILongPressGestureRecognizer(target: self,
action: #selector(handleLongGesture(_:)))
clcImages?.addGestureRecognizer(g)
}
func handleLongGesture(_ gesture: UILongPressGestureRecognizer)
{
switch(gesture.state) {
case UIGestureRecognizerState.began:
guard let selectedIndexPath = clcImages?.indexPathForItem(at: gesture.location(in: clcImages)) else {
break
}
clcImages?.beginInteractiveMovementForItem(at: selectedIndexPath)
case UIGestureRecognizerState.changed:
clcImages?.updateInteractiveMovementTargetPosition(gesture.location(in: gesture.view!))
case UIGestureRecognizerState.ended:
clcImages?.endInteractiveMovement()
default:
clcImages?.cancelInteractiveMovement()
}
}
https://stackoverflow.com/questions/43918244
复制相似问题