我向collectionView
添加了一个longPress手势,并使用系统API来实现重新排序集合视图。这是我的代码:
CGPoint point = [sender locationInView:_collectionView];
NSIndexPath *indexPath = [_collectionView indexPathForItemAtPoint:point];
if (!indexPath) {
return;
}
DragableCollectionViewCell *tempCell = (DragableCollectionViewCell *)[_collectionView cellForItemAtIndexPath:indexPath];
switch (sender.state) {
case UIGestureRecognizerStateBegan: {
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
[tempCell showDeletButton];
[tempCell.deleteButton zkj_addEventHandler:^(id sender) {
[tempCell hideDeleteButton];
[self.dataSource[indexPath.section] removeObjectAtIndex:indexPath.item];
[self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
} withControlEvents:UIControlEventTouchUpInside];
[_collectionView beginInteractiveMovementForItemAtIndexPath:indexPath];
}
break;
case UIGestureRecognizerStateChanged: {
[_collectionView updateInteractiveMovementTargetPosition:point];
}
break;
case UIGestureRecognizerStateEnded: {
[_collectionView endInteractiveMovement];
}
break;
default:
[_collectionView cancelInteractiveMovement];
break;
}
我正确地实现了collectionView
的dataSource和委托。之后,它可以工作,我可以移动拖动单元格并重新排序collectionView
。但是当我将单元格拖到底部或顶部时,单元格将停在底部或顶部,collectionView
将不会自动重新排序。
答案 0 :(得分:0)
在 iOS-11 中,
您可以在UICollectionView
中使用拖放 API进行重新排序。
它比您的自定义实现更灵活,更易于实现。
请参阅以下链接,获取有关如何实现该方法的精彩教程: https://medium.com/@p.gpt10/drag-it-drop-it-in-collection-table-ios-11-6bd28795b313
答案 1 :(得分:0)
确保您的手势识别器如果您使用UICollectionViewController
,则应允许设置自定义手势识别器:self.installsStandardGestureForInteractiveMovement = false
。
另外,不要忘记实现委托的方法moveItemAt
和canMoveItemAt
这是教程:http://nshint.io/blog/2015/07/16/uicollectionviews-now-have-easy-reordering/