• iOS UICollectionViewCell 的拖动


    1.长按cell的情况下实现拖动,所以理应想到用长按手势。

    2.既然实现移动cell,就要看看UICollectionView 有没有方法或者协议可以移动的。通过查看UICollectionView的协议方法,可以在UICollectionViewDataSource中看到有两个方法。

    - (BOOL)collectionView:(UICollectionView *)collectionView canMoveItemAtIndexPath:(NSIndexPath *)indexPath;
    - (void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath*)destinationIndexPath;
    

     3.OK 知道了以上两个步骤,那么就可以开始写代码了。

    // 设置手势
    - (void)setupGesture
    {
        UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handlelongGesture:)];
        
        [self.collectionView addGestureRecognizer:longPress];
    }
    - (void)handlelongGesture:(UILongPressGestureRecognizer *)longGesture {
        //判断手势状态
        switch (longGesture.state) {
            case UIGestureRecognizerStateBegan:
        {
    //判断手势落点位置是否在路径上 NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:[longGesture locationInView:self.collectionView]]; if (indexPath == nil) { break; } //在路径上则开始移动该路径上的cell [self.collectionView beginInteractiveMovementForItemAtIndexPath:indexPath]; } break; case UIGestureRecognizerStateChanged: //移动过程当中随时更新cell位置 [self.collectionView updateInteractiveMovementTargetPosition:[longGesture locationInView:self.collectionView]]; break; case UIGestureRecognizerStateEnded: //移动结束后关闭cell移动 [self.collectionView endInteractiveMovement]; break; default: [self.collectionView cancelInteractiveMovement]; break; } } - (BOOL)collectionView:(UICollectionView *)collectionView canMoveItemAtIndexPath:(NSIndexPath *)indexPath{ //返回YES允许其item移动 return YES; } - (void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath*)destinationIndexPath { //取出源item数据 id objc = [_dataSource objectAtIndex:sourceIndexPath.item]; //从资源数组中移除该数据 [_dataSource removeObject:objc]; //将数据插入到资源数组中的目标位置上 [_dataSource insertObject:objc atIndex:destinationIndexPath.item]; }

    注:_dataSource 是你的数据源。

  • 相关阅读:
    UI- 基础控件零散知识点回归
    UI-定时器与动画使用总结
    IE浏览器url中带中文报错的问题;以及各种兼容以及浏览器问题总结
    java实现判断一个经纬度坐标是否在一个多边形内(经自己亲测)
    高德地图web端笔记;发送http请求的工具类
    高德地图JSapi
    shiro(三),使用第三方jdbcRealm连接数据库操作
    shiro(二)自定义realm,模拟数据库查询验证
    java安全框架shiro(一)
    解决celipse中mybatis使用的时候xml没有提示的问题
  • 原文地址:https://www.cnblogs.com/peaker-wu/p/5359510.html
Copyright © 2020-2023  润新知