在两个 UICollectionView 之间拖放

Posted

技术标签:

【中文标题】在两个 UICollectionView 之间拖放【英文标题】:Drag & Drop between two UICollectionViews 【发布时间】:2013-07-02 14:44:50 【问题描述】:

我需要从CollectionView One 中拖出一个 Cell 并将其放到 CollectionView 两个。 一个 CollectionView 中的拖放是没有问题的,但是如何 我可以将 Cell 从 CollectionView One 移到 CollectionView 2 吗?

有什么想法吗?任何已经解决了这个问题的项目或框架? 感谢您的帮助!

【问题讨论】:

您必须在两个集合视图的超级视图中创建一个“虚拟”单元格。即唯一的共同点。然后拦截它被移动的位置并根据需要将其删除/添加到集合视图中。 【参考方案1】:

https://github.com/Ice3SteveFortune/i3-dragndrop 看看这个——我正在努力实现它的帮助。它还支持表格视图

更新

我最近发布了这个代码库的第二个版本,称为BetweenKit。它现在是一个成熟的拖放框架。

希望它有用!

【讨论】:

【参考方案2】:

当您从第一个集合视图中选择单元格时,将其从该集合视图中删除,创建一个新视图作为该单元格的副本,并将其作为父视图的子视图放在所有视图之上。使用平移手势使该视图可移动。一旦你“放下”这个中间单元格,检测它的位置并将它添加到当前的集合视图中。

【讨论】:

【参考方案3】:

好的,这是以下示例中最简单的流程:

    为每个UICollectionView 添加UIGestureRecognizer

    用一种方法连接每个手势识别器:

    @IBAction func longPressGestureChanged(recognizer: UILongPressGestureRecognizer)  ... 
    

    UIViewController 内为每个UICollectionView 添加@IBOutlet

    @IBOutlet var collectionViewGreen: UICollectionView!
    @IBOutlet var collectionViewYellow: UICollectionView!
    

    实现手势识别器方法来检测变化:

    @IBAction func longPressGestureChanged(recognizer: UILongPressGestureRecognizer) 
    
        let globalLocation = recognizer.locationInView(view)
    
        if CGRectContainsPoint(collectionViewGreen.frame, globalLocation) 
    
            //you cover green collection view
            let point = view.convertPoint(globalLocation, toView: collectionViewGreen)
            if let indexPath = collectionViewGreen.indexPathForItemAtPoint(point) 
               //you cover cell in green collection view
             else 
                //you do not cover any of cells in green collection view
            
    
         else if CGRectContainsPoint(collectionViewYellow.frame, globalLocation) 
    
            //you cover yellow collection view
            let point = view.convertPoint(globalLocation, toView: collectionViewYellow)
            if let indexPath = collectionViewYellow.indexPathForItemAtPoint(point) 
                //you cover cell in yellow collection view
             else 
                //you do not cover any of cells in yellow collection view
            
    
         else 
            //you do not cover any of collection views
        
    
    

【讨论】:

以上是关于在两个 UICollectionView 之间拖放的主要内容,如果未能解决你的问题,请参考以下文章

拖放 UICollectionView 单元格重用问题

UICollectionView 拖放单元格

UICollectionView 快速拖放

如何在 UICollectionView 拖放期间删除“幽灵”单元格,并使移动单元格不透明?

UICollectionView 与 SwiftUI + 拖放重新排序可能吗?

UICollectionView 拖放更新所有受影响的 indexPaths