2015-10-23 14 views
5

ho creato un app con UICollectionView come questa immagine:Swipe Animazione per Cell rimuovere in UICollectionView - Swift 2.0

enter image description here

Aggiunto due gesti:

Il primo (in alto) provoca la cancellazione della cella.

Il secondo (in basso) aggiorna la cella (acquisisce i nuovi dati di CoreData). Le funzioni funzionano bene, ma non c'è animazione. iOS ha un'animazione molto interessante che trascina la cella verso l'alto e la cella scompare.

Sono un principiante in animazione veloce, quindi sono un po 'perso quando.

La mia domanda è: come posso aggiungere un'animazione che occupa l'intera cella?

Ho letto alcune risposte sul sito, ma tutte in Object-C (like this).

Qualcuno può aiutarmi?

+0

James la tua app sembra fantastica! –

+0

James, hai mai funzionato come volevi? Cercando di implementare esattamente lo stesso tipo di funzionalità in Swift. Mi piacerebbe vedere la tua app, anche se funzionasse! –

risposta

12

Il modo migliore per ottenere l'animazione sulla cella di UICollectionView è prioritario rispetto al suo layout UICollectionViewLayout. Ha un metodo che restituirà gli attributi di layout della cella che vuoi sia visualizzato/inserisci/cancella.

Ad esempio: ho creato una classe KDCollectionViewFlowLayout che eredita UICollectionViewFlowLayout e sovrascrive l'attributo delete.

class KDCollectionViewFlowLayout: UICollectionViewFlowLayout { 

    override func finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? { 
     let attribute = super.finalLayoutAttributesForDisappearingItemAtIndexPath(itemIndexPath) 

     attribute?.transform = CGAffineTransformTranslate(attributes.transform, 0, ITEM_SIZE) 
     attribute?.alpha = 0.0 
     return attribute 

    } 
} 

Ora è necessario assegnare oggetto di questo FlowLayout alla vista di raccolta sia in viewDidLoad oppure si può assegnare attraverso storyboard.

let flowLayout = KDCollectionViewFlowLayout() 
self.collectionView?.setCollectionViewLayout(flowLayout, animated: true) 

Ora, è tutto pronto per la trasformazione della cellula che è stata definita a finalLayoutAttributesForDisappearingItemAtIndexPath metodo ogni volta che si esegue alcuna operazione di eliminazione sul collectionView.

Aggiornamento

È necessario eliminare gli elementi da vista collezione utilizzando operazione di travaso.

collectionView.performBatchUpdates({() -> Void in 
    //Array of the data which you need to deleted from collection view 
    let indexPaths = [NSIndexPath]() 
    //Delete those entery from the data base. 

    //TODO: Delete the information from database 

    //Now Delete those row from collection View 

    collectionView.deleteItemsAtIndexPaths(indexPaths) 

}, completion:nil) 
+0

Giusto, nel primo caso, ho provato a inserire il mio codice, ma non ci sono riuscito. Il mio codice è diviso in tre: una classe e due estensioni. [link] (http://i.stack.imgur.com/DHIQE.png) Come si inserisce il suo esempio nel mio codice? Sono più confuso di quanto inizialmente ... – James

+0

Scusa, ma non ho lavorato qui, potresti postare un link per scaricare il tuo esempio, per me vedere in pratica come hai organizzato tutto? – James

+0

@James, Perfect [codice di esempio] (https://github.com/mpospese/CircleLayout) per l'animazione di eliminazione. – deoKasuhal

Problemi correlati