iOS9 之后


前言: 看完你可以学到哪些呢? 就是文章标题那么多, 只有那么多. . 手残效果图没弄好.

@property (nonatomic, strong) UICollectionView *xtCollectionView;
@property (nonatomic, strong) UICollectionViewFlowLayout *flowLayout;
@property (nonatomic, strong) CALayer *dotLayer;
@property (nonatomic, assign) CGFloat endPoint_x;
@property (nonatomic, assign) CGFloat endPoint_y;
@property (nonatomic, strong) UIBezierPath *path;
@property (nonatomic, strong) NSMutableArray *array;
@property (nonatomic, strong) UILongPressGestureRecognizer *longPress;

初始化一个数组

self.array = [NSMutableArray arrayWithObjects:@"红包", @"转账", @"手机充值", @"芝麻信用",@"天猫", @"生活缴费", @"蚂蚁呗", @"世界那么大",@"余额宝", @"安全快付", @"蚂蚁聚宝", @"哈哈",@"红包1", @"转账1", @"手机充值1", @"芝麻信用1",@"天猫1", @"生活缴费1", @"蚂蚁呗1", @"世界那么大1",@"余额宝1", @"安全快付1", @"蚂蚁聚宝1", @"哈哈1",  nil];

创建CollectionView

- (UICollectionView *)xtCollectionView
{if (!_xtCollectionView) {_flowLayout = [[UICollectionViewFlowLayout alloc] init];_flowLayout.minimumLineSpacing = 1;_flowLayout.minimumInteritemSpacing = 1;_xtCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 20, Screen_Width, Screen_Height - 20) collectionViewLayout:_flowLayout];_xtCollectionView.dataSource = self;_xtCollectionView.backgroundColor = [UIColor colorWithRed:0.8568 green:0.8568 blue:0.8568 alpha:1.0];_xtCollectionView.delegate = self;[_xtCollectionView registerClass:[XTCollectCell class] forCellWithReuseIdentifier:@"cellIdentiifer"];}return _xtCollectionView;
}

添加一个长按的手势

_longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(lonePressMoving:)];
[self.xtCollectionView addGestureRecognizer:_longPress];

手势方法的实现

- (void)lonePressMoving:(UILongPressGestureRecognizer *)longPress
{switch (_longPress.state) {case UIGestureRecognizerStateBegan: {{NSIndexPath *selectIndexPath = [self.xtCollectionView indexPathForItemAtPoint:[_longPress locationInView:self.xtCollectionView]];// 找到当前的cellXTCollectCell *cell = (XTCollectCell *)[self.xtCollectionView cellForItemAtIndexPath:selectIndexPath];// 定义cell的时候btn是隐藏的, 在这里设置为NO[cell.btnDelete setHidden:NO];[_xtCollectionView beginInteractiveMovementForItemAtIndexPath:selectIndexPath];}break;}case UIGestureRecognizerStateChanged: {[self.xtCollectionView updateInteractiveMovementTargetPosition:[longPress locationInView:_longPress.view]];break;}case UIGestureRecognizerStateEnded: {[self.xtCollectionView endInteractiveMovement];break;}default: [self.xtCollectionView cancelInteractiveMovement];break;}
}

移动方法

- (void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(nonnull NSIndexPath *)sourceIndexPath toIndexPath:(nonnull NSIndexPath *)destinationIndexPath
{
    NSIndexPath *selectIndexPath = [self.xtCollectionView indexPathForItemAtPoint:[_longPress locationInView:self.xtCollectionView]];
    // 找到当前的cell
    XTCollectCell *cell = (XTCollectCell *)[self.xtCollectionView cellForItemAtIndexPath:selectIndexPath];
    [cell.btnDelete setHidden:YES];
    [self.array exchangeObjectAtIndex:sourceIndexPath.item withObjectAtIndex:destinationIndexPath.item];
    [self.xtCollectionView reloadData];
}
![效果.gif](http://upload-images.jianshu.io/upload_images/1506501-0c407e1e5fe8243c.gif?imageMogr2/auto-orient/strip)

原文链接点我

效果图的解释: collectionView的可编辑状态是”假的”, 只是对数据进行了处理
你可能想知道动画的实现可以看我的另一篇博客iOS仿美团外卖饿了吗App点餐动画


iOS9 之前

请参照这个1.
Github上很早的项目了, 希望对有需要的同学有启发的作用, 点我下载感谢作者
请参照这个2.
简书上的一篇文章


您可能想了解我的更多文章, 与我共同成长, 请关注我
带你系统学习GCD[一]
带你系统学习GCD[二]
Swift版本仿网易云音乐播放音乐动画效果
三分钟教你把代码托管到Github
Swift 很强大的图表库-Charts使用
Swift版仿简书App淘宝App很友好弹出view效果


更多效果点我

iOS UICollectionView 高级用法(长按cell移动重新排列)相关推荐

  1. Cacti Weathermap 高级用法 (二)

    成都长宽Weathermap实际运用的效果图示例: 这是一个CNC出口的质量监控图. 途中cnc节点(红色)是一个展示图例,TEL节点根据存活状态显示为绿色 TEL节点上面P:47.2ms 是一个,这 ...

  2. Python进阶:切片的误区与高级用法

    众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组...)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slice)就是一种截取索引片段的技术,借助切片 ...

  3. Git log高级用法

    格式化Log输出 首先,这篇文章会展示几种git log格式化输出的例子.大多数例子只是通过标记向git log请求或多或少的信息. 如果你不喜欢默认的git log格式,你可以用git config ...

  4. vue keep-alive保存路由状态2 (高级用法,接上篇)

    接上篇 https://www.cnblogs.com/wangmaoling/p/9803960.html 本文很长,请耐心看完分析. 4.高级用法,指定从什么组件进入才缓存,以及销毁缓存:先介绍我 ...

  5. Python切片中的误区与高级用法

    众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slice)就是一种截取索引片段的技术,借助切片技术 ...

  6. OpenCV图像剪切的扩展和高级用法:任意裁剪,边界扩充

    OpenCV图像剪切的扩展和高级用法:任意裁剪,边界扩充 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/78113325 ...

  7. Python——迭代器的几个高级用法

    今天我们依然介绍的是迭代器,不过介绍的是几个比较常用的 高级用法 ,在实际场景当中非常实用,可以帮助我们大大简化代码的复杂度. 跳过开头 首先是跳过开始部分,这个在我们读取文本的时候最常用.在实际的应 ...

  8. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...

  9. 细说 ASP.NET Cache 及其高级用法

    阅读目录 开始 Cache的基本用途 Cache的定义 Cache常见用法 Cache类的特点 缓存项的过期时间 缓存项的依赖关系 - 依赖其它缓存项 缓存项的依赖关系 - 文件依赖 缓存项的移除优先 ...

最新文章

  1. python跟java 效率_对比平台--Java与Python之间的性能差异
  2. Ruby 2.5.0概览
  3. background-position 详解
  4. 2021年云南高考查询成绩时间,2021年云南高考成绩排名及成绩公布时间 什么时候出来...
  5. java中process方法用处_Java中ProcessBuilder应用实例
  6. Linux系统 设置 cockpit 自动开机启动时异常问题处理(设置systemctl enable cockpit 异常【解决办法】)
  7. 荣耀青春30青春版能升鸿蒙,或是新一代拍照神器 荣耀30青春版今日发布
  8. python读取pdf文件 pdfplumber_Python pdfprumber用于PDF表提取,pythonpdfplumber,表格
  9. python爬虫ip代理池_爬虫教程-Python3网络爬虫开发——IP代理池的维护
  10. 中单引号怎么转义_在JavaScript中组合字符串的4种方法
  11. java rtmp录制视频_red5-rtmp-push
  12. DataTable的Select方法
  13. 联合国应考虑建设第二总部
  14. 计算机硬盘的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. 日积(Running)月累(ZSSURE):Learning How to Learn,学习习惯
  16. 《通信原理》awgn信道仿真
  17. BlendMask 论文学习
  18. 极化的概念及天线极化方式
  19. 【程序源代码】微信小程序商城管理系统(java后台+小程序)
  20. matlab dvb,DVB-T OFDM Matlab仿真的整理和疑问

热门文章

  1. 世界上最遥远的距离(中+法+英)
  2. Symfony视频教程-根据Symfony官方网站制作的视频教程
  3. C盘的root文件在哪里,root密码存放在哪个文件夹
  4. scala 系列 ---- take,takeRight,takeWhile的使用详解用法及代码示例
  5. 14年macmini装双硬盘_廉颇老矣,还能战否?2014 Mac Mini Late 加装HP EX920固态硬盘
  6. 计算机毕业论文-ASP.NET的网站新闻管理系统设计与实现
  7. 即使不学编程,你也要了解计算机思维
  8. NewLife.Net
  9. JS节点(node)
  10. centos7中防火墙设置