UICollectionView拖动调整布局

本文介绍如何通过添加UILongPressGestureRecognizer到UICollectionView,实现长按开始拖动调整布局的功能。通过监听手势状态,结合UICollectionView的相关API,如beginInteractiveMovementForItemAtIndexPath、updateInteractiveMovementTargetPosition和endInteractiveMovement等,实现对单元格的交互式移动,适用于iOS 9及以上版本。

UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:frame collectionViewLayout:layout];

collectionView.delegate = self;

collectionView.dataSource = self;

[self.view addSubview:collectionView];


UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGesture:)];

    longPressGesture.minimumPressDuration = 0.25f;

[collectionView addGestureRecognizer:longPressGesture];


#pragma mark - 开始拖拽

- (void)longPressGesture:(UILongPressGestureRecognizer *)gesture

{

NSIndexPath *selectedIndexPath = [collectionView indexPathForItemAtPoint:[gesture locationInView:collectionView]];

UICollectionViewCell *cell =  [collectionView cellForItemAtIndexPath:selectedIndexPath];

switch (gesture.state) {

        case UIGestureRecognizerStateBegan:

        {

            if (selectedIndexPath) {

                if (‘你的版本号’ >= 9) {

                    [collectionView beginInteractiveMovementForItemAtIndexPath:selectedIndexPath];

                }

            }

            break;

        }

        case UIGestureRecognizerStateChanged:

        {   

            

            if (!cell || [cell isKindOfClass:[cell class]] ) {

                if (‘你的版本号’ >= 9) {

                    [collectionView endInteractiveMovement];

                }

                break;

            }

            @try {

                if (‘你的版本号’ >= 9) {

                    //更新位移

                    [collectionView updateInteractiveMovementTargetPosition:[gesture locationInView:gesture.view]];

                    

                }//如果为空则结束cell位移

            } @catch (NSException *exception) {

                if (‘你的版本号’ >= 9) {

                    [collectionView endInteractiveMovement];

                }

            } @finally {

                

            }

            break;

        }

        case UIGestureRecognizerStateEnded:

        {

            if (‘你的版本号’ >= 9) {

                //结束位移

                [collectionView endInteractiveMovement];

            }

            

            break;

        }

        default:

        {

            if (‘你的版本号’ >= 9) {

                [collectionView cancelInteractiveMovement];

            }

            break;

        }

            

    }

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值