84 votes

Modification des données d'animation UICollectionView

Dans mon Projet j'utilise UICollectionView pour afficher une grille d'icônes.

L'utilisateur est en mesure de modifier la commande en cliquant sur une commande segmentée qui appel une extraction de base de données avec différents NSSortDescriptor.

La quantité de données est toujours la même, il suffit de se retrouver dans les différentes sections / lignes:

- (IBAction)sortSegmentedControlChanged:(id)sender {

_fetchedResultsController = nil;
_fetchedResultsController = [self newFetchResultsControllerForSort];

NSError *error;
if (![self.fetchedResultsController performFetch:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}

[self.collectionView reloadData];

}

Le problème est que reloadData ne pas animer le changement, UICollectionView saute juste avec les nouvelles données.

Dois-je garder la trace de qui indexPath une cellule avant et après le changement, et l'utilisation [de soi.collectionView moveItemAtIndexPath: toIndexPath:] pour l'exécution de l'animation pour le changer ou il y a une meilleure méthode ?

Je n'ai pas eu beaucoup dans la sous-classement collectionViews sorte que toute aide sera grand...

Merci, Le projet de loi.

146voto

noa Points 8851

L'emballage -reloadData en -performBatchUpdates: ne semble pas provoquer l'animation d'une vue de collection à une section.

 [self.collectionView performBatchUpdates:^{
    [self.collectionView reloadData];
} completion:nil];
 

Cependant, ce code fonctionne:

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

74voto

Stripes Points 1960

reloadData n'anime pas et ne le fait pas non plus de manière fiable lorsqu'il est placé dans un bloc d'animation UIView. Il souhaite appartenir à un bloc performBatchUpdates UICollecitonView, alors essayez quelque chose de similaire à:

     [self.collectionView performBatchUpdates:^{
        [self.collectionView reloadData];
    } completion:^(BOOL finished) {}];
 

68voto

yar1vn Points 1472

Voici ce que j'ai fait pour animer le rechargement de TOUTES LES SECTIONS:

 [self.collectionView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.collectionView.numberOfSections)]];
 

1voto

Victor Engel Points 582

Le texte d'aide, dit:

Appelez cette méthode pour recharger tous les éléments dans l'affichage de la collection. Cela provoque l'affichage de la collection jeter actuellement les éléments visibles et réafficher eux. Pour plus d'efficacité, l'affichage de la collection affiche uniquement ces cellules supplémentaires de points de vue qui sont visibles. Si l' la collecte de données se rétrécit comme un résultat de la recharge, l'affichage de la collection ajuste le défilement des décalages en conséquence. Vous ne devez pas appeler cette méthode dans le milieu de l'animation de blocs où les éléments sont insérées ou supprimées. Les Insertions et les suppressions entraînent automatiquement la table des données de mise à jour de façon appropriée.

Je pense que la clé est "provoque l'affichage de la collection jeter actuellement les éléments visibles". Comment est-ce qu'il va animer le mouvement des éléments qu'il a écarté?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X