2013-07-02 11 views
5

Ho bisogno di trascinare una cella da CollectionView Uno e rilasciarlo a CollectionView Due. Il trascinamento & Il drop all'interno di un CollectionView non è un problema, ma come posso estrarre la cella da CollectionView One a CollectionView Two?Drag & Drop tra due UICollectionViews

Qualche idea? Qualche progetto o framework che abbia già risolto questo problema? Grazie per l'aiuto!

+1

Dovrai creare una cella "fittizia" nella superview di entrambe le viste di raccolta. cioè l'unico terreno comune. Quindi intercettate dove viene spostato e rimuovetelo/aggiungetelo alle viste di raccolta secondo necessità. – Fogmeister

risposta

3

https://github.com/Ice3SteveFortune/i3-dragndrop Controllare questo fuori - è un aiuto che sto lavorando per ottenere proprio questo. Supporta anche tableviews

UPDATE

Ho recentemente rilasciato la seconda versione di questo codebase, chiamato BetweenKit. È ora un framework drag-and-drop completo.

Spero che si rivelerà utile!

1

Quando si seleziona la cella dalla prima vista raccolta, rimuoverla da questa vista insieme, creare una nuova vista come copia di quella cella posizionarla come sottoview della superview sopra tutte le viste. Rendi mobile quella vista usando i movimenti di pan. Non appena si "rilascia" questa cella intermediario, rilevare la sua posizione e aggiungerla alla vista raccolta corrente.

2

Ok, qui è il flusso più semplice di sempre per il seguente esempio:

enter image description here

  1. Aggiungi UIGestureRecognizer per ogni di UICollectionView.
  2. Collegare ogni sistema di riconoscimento gesto con un metodo:

    @IBAction func longPressGestureChanged(recognizer: UILongPressGestureRecognizer) { ... } 
    
  3. Entro UIViewController aggiungere @IBOutlet per ciascuna delle UICollectionView:

    @IBOutlet var collectionViewGreen: UICollectionView! 
    @IBOutlet var collectionViewYellow: UICollectionView! 
    
  4. implementare il metodo gesto riconoscitore per rilevare i cambiamenti:

    @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 
        } 
    }