我正在iOS Xcode 8.3.2 Swift 3.1中创建一个屏幕,其上有一行水平滚动的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)
}
答案 0 :(得分:0)
阅读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()
}
}