2015-10-23 15 views
5

Ich habe eine App mit UICollectionView wie dieses Bild:Swipe-Animation für Entfernen Handy in UICollectionView - Swift 2.0

enter image description here

Added zwei Gesten:

Die erste (oben) wird die Zelle löschen.

Die zweite (down) wird die Zelle aktualisieren (neue Daten von CoreData nehmen). Die Funktionen funktionieren gut, aber es gibt keine Animation. iOS hat eine sehr coole Animation, die die Zelle hochzieht und die Zelle verschwindet.

Ich bin ein Anfänger in Animationen schnell, also bin ich ein wenig verloren, wenn es.

Meine Frage ist: Wie kann ich eine Animation hinzufügen, die die gesamte Zelle einnimmt?

Ich lese einige Antworten auf der Website, aber alle in Object-C (like this).

Kann mir jemand helfen?

+0

James Ihre App sieht gut aus! –

+0

James, hast du das jemals so gemacht, wie du es geplant hast? Sie möchten genau die gleiche Funktionalität in Swift implementieren. Würde gerne Ihre App sehen, wenn Sie auch arbeiten! –

Antwort

12

Der beste Weg, um die Animation auf der Zelle von zu erreichen, ist das Überschreiben des Layouts UICollectionViewLayout. Es hat Methode, die die Layoutattribute der Zelle zurückgibt, die Sie entweder anzeigen/einfügen/löschen möchten.

Zum Beispiel: Ich habe eine Klasse erstellt KDCollectionViewFlowLayout erben UICollectionViewFlowLayout und überschreiben das Attribut löschen.

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 

    } 
} 

Jetzt müssen Sie Aufgabe dieser Flow der Sammlung Ansicht in entweder viewDidLoad zuweisen oder Sie können es durch Storyboard zuweisen.

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

Nun Sie sind alle für die Transformation von Zellen festgelegt, die Sie sich in finalLayoutAttributesForDisappearingItemAtIndexPath Methode definiert, wenn Sie einen Löschvorgang auf dem collectionView auszuführen.

aktualisieren

Sie müssen die Elemente aus der Sammlung Ansicht mit der Batch-Betrieb löschen.

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

Richtig, in erster Linie habe ich versucht, meinen Code einzupassen, aber es ist nicht gelungen. Mein Code ist in drei Teile unterteilt: Eine Klasse und zwei Erweiterungen. [link] (http://i.stack.imgur.com/DHIQE.png) Wie passe ich sein Beispiel in meinen Code? Ich bin mehr verwirrt als zunächst ... – James

+0

Entschuldigung, aber habe hier nicht gearbeitet, du könntest einen Link zum Download deines Beispiels posten, damit ich in der Praxis sehen kann, wie du alles organisiert hast? – James

+0

@James, Perfect [Beispielcode] (https://github.com/mpospese/CircleLayout) zum Löschen einer Animation. – deoKasuhal