最近在实现类似网易新闻的首页滑块的编辑效果: 长按后进入编辑界面, 然后可以通过拖拽实现cell的移动, 研究后发现两种实现方式: 第一种是直接利用系统提供的UICollectionView API实现移动, 不过只能在iOS9上面使用. 所以这里就介绍另外一种方式.
源码效果示例:
原理部分
- 添加一个长按手势到UICollectionView上
- 在这个手势的selector中通过获取到当前手势在collectionVIew的location来获取到一个indexPath, 如果这个indexPath是有效的, 那么就可以通过这个indexPath获取到对应的cell.
- 将获取到的cell截图, 然后将这个cell隐藏, 通过设置这个截图的frame使得这个截图跟随手指同步移动, 如果截图移动到了另外一个cell的位置, 则通过调用collectionView的方法将这两个cell交换位置, 同时需要更新collectionView的dataSource.
实现部分
- 在collectionView上添加一个长按手势
let longGes = UILongPressGestureRecognizer(target: self, action: #selector(self.longPressd(_:)))
collectionView.addGestureRecognizer(longGes)
2 在selector中处理手势的响应
- 2.1 获取当前手势的位置
let location = ges.locationInView(self.collectionView)
- 2.2 获取这个位置对应的在collectionView中的indexPath, 注意这个i