zoukankan      html  css  js  c++  java
  • UICollectionView移动

    collectionView在iOS9中发布了一个可以移动cell的新特性,实现如下:

    1.创建collectionView并设置代理

    - (UICollectionView *)collectionView{
        if (_collectionView == nil) {
            UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
            layout.itemSize = CGSizeMake(50, 50);
            _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height) collectionViewLayout:layout];
            layout.minimumLineSpacing = 10;
            layout.minimumInteritemSpacing = 10;
            [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
            _collectionView.backgroundColor = [UIColor cyanColor];
            _collectionView.dataSource = self;
           //此处给其增加长按手势,用此手势触发cell移动效果
            UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handlelongGesture:)];
            [_collectionView addGestureRecognizer:longGesture];
        }
        return _collectionView;
    }

    2.设置其资源

    _dataSource = [NSMutableArray array];
        for (int i = 1; i <= 50; i++) {
            NSString *imageName = [NSString stringWithFormat:@"%d",i];
            [_dataSource addObject:imageName];
        }

    3.监听手势,并设置其允许移动cell和交换资源

    - (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];
    }

    原文链接:iOS9 UICollectionView拖拽移动单元格

    阿斯顿撒  

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    block的是发送信号的线程,又不是处理槽函数的线程
  • 原文地址:https://www.cnblogs.com/On1Key/p/5337747.html
Copyright © 2011-2022 走看看