长按移动cell

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    MineCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCell forIndexPath:indexPath];
    cell.backgroundColor = [UIColor whiteColor];
    cell.cellImage.image = [UIImage imageNamed:self.imagesArray[indexPath.row]];
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressGesture:)];
    [cell addGestureRecognizer:longPress];
    return cell;
}

- (void)longPressGesture:(UILongPressGestureRecognizer *)sender{
    MineCollectionViewCell *cell = (MineCollectionViewCell *)sender.view;
    NSIndexPath *cellIndexPath = [_mineCollection indexPathForCell:cell];
    [_mineCollection bringSubviewToFront:cell];
    BOOL isChanged = NO;
    if (sender.state == UIGestureRecognizerStateBegan) {
        [self.cellAttributesArray removeAllObjects];
        for (int i = 0;i< self.imagesArray.count; i++) {
            [self.cellAttributesArray addObject:[_mineCollection layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForItem:i inSection:0]]];
        }
        self.lastPressPoint = [sender locationInView:_mineCollection];
    }else if (sender.state == UIGestureRecognizerStateChanged){
        cell.center = [sender locationInView:_mineCollection];
        for (UICollectionViewLayoutAttributes *attributes in self.cellAttributesArray) {
            if (CGRectContainsPoint(attributes.frame, cell.center) && cellIndexPath != attributes.indexPath) {
                isChanged = YES;
                //对数组中存放的元素重新排序
                NSString *imageStr = self.imagesArray[cellIndexPath.row];
                [self.imagesArray removeObjectAtIndex:cellIndexPath.row];
                [self.imagesArray insertObject:imageStr atIndex:attributes.indexPath.row];
                [self.mineCollection moveItemAtIndexPath:cellIndexPath toIndexPath:attributes.indexPath];
                
                
            }
        }
        
    }else if (sender.state == UIGestureRecognizerStateEnded) {
        if (!isChanged) {
            cell.center = [_mineCollection layoutAttributesForItemAtIndexPath:cellIndexPath].center;
        }
        NSLog(@"排序后---%@",self.imagesArray);
    }
    
    
}

原文地址:https://www.cnblogs.com/lidongq/p/5535633.html