2013-10-09 30 views
16

Mi piacerebbe ricaricare UICollectionView con alcune animazioni interessanti. In UITableView esiste un metodo chiamato reloadSections:withRowAnimation. Ma in UICollectionView c'è solo reloadSections.UICollectionView reloadSections con animazione

Come personalizzare l'animazione di ricaricamento? L'ho visto sicuramente nelle app sull'App Store.

+0

possibile duplicato del [modifica dei dati animato UICollectionView] (http://stackoverflow.com/questions/13272315/uicollectionview-animate-data-change) – Vinzzz

risposta

27

Basta fare in quel modo:

[self.collectionView performBatchUpdates:^{ 
    [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; 
} completion:nil]; 
+1

Grazie, ma si anima ancora con un'animazione dissolvenza ... – Sergey

+0

Quindi devi approfondire e scrivere il tuo '' 'UICollectionViewLayout'''. Non è possibile confrontarlo con UITableView, perché UICollectionView non è solo un modo per visualizzare i dati in 1D (come UITableView) o 2D (come con UICollectionViewFlowLayout). Non si è limitati a nulla e quindi non ci sono animazioni banali diverse dalla dissolvenza integrata. Non è possibile per i layout personalizzati utilizzare animazioni diverse da slide-from-top/bottom/middle, perché le animazioni non possono essere definite globalmente !!! – Fab1n

1

Questo articolo qui vale la pena di leggere: http://victorlin.me/posts/2016/04/29/uicollectionview-invalid-number-of-items-crash-issue

TLDR:

così è stato performBatchUpdates chiama CollectionView (: numberOfItemsInSection :) prima di chiamare la data chiusura per conoscere i numeri degli articoli. Successivamente, chiama la chiusura e, infine, chiama collectionView (: numberOfItemsInSection :) di nuovo per controllare il numero. E qui è dove getta l'eccezione di asserzione.

14

Swift 3 Versione:

collectionView.performBatchUpdates({ 
    let indexSet = IndexSet(integer: 0) 
    self.collectionView.reloadSections(indexSet) 
}, completion: nil) 
Problemi correlati