Existe-t-il un moyen de spécifier la durée des animations de ligne UITableView ou d'obtenir un rappel lorsque l'animation se termine?
Ce que je voudrais faire, c'est faire clignoter les indicateurs de défilement une fois l'animation terminée. Faire le flash avant cela ne fait rien. Jusqu'à présent, la solution de contournement que j'ai est de retarder une demi-seconde (cela semble être la durée d'animation par défaut), c'est-à-dire:
[self.tableView insertRowsAtIndexPaths:newRows
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView performSelector:@selector(flashScrollIndicators)
withObject:nil
afterDelay:0.5];
ios
iphone
uitableview
animation
cocoa-touch
Daniel Dickison
la source
la source
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath
Réponses:
De nos jours, si vous voulez faire cela, il y a une nouvelle fonction à partir d'iOS 11 :
Dans les fermetures de mises à jour, vous placez le même code que dans la section beginUpdates () / endUpdates. Et la complétion est exécutée après toutes les animations.
la source
Je viens de tomber sur ça. Voici comment procéder:
Objectif c
Rapide
la source
setAnimationDuration
ne semble pas affecter la durée d'insertion / suppression. iOS 6En développant la bonne réponse de karwag , notez que sur iOS 7, entourer la CATransaction avec une animation UIView permet de contrôler la durée de l'animation de la table.
La durée de l'animation UIView n'a aucun effet sur iOS 6. Peut-être que les animations de table iOS 7 sont implémentées différemment, au niveau UIView.
la source
C'est un sacré truc utile! J'ai écrit une extension UITableView pour éviter d'écrire des trucs CATransaction tout le temps.
Ceci est utilisé comme ceci:
la source
setCompletionBlock
qui est iOS 4+Raccourcir la bonne réponse de Brent , pour au moins iOS 7, vous pouvez envelopper tout cela de manière laconique dans un appel [UIView animateWithDuration: delay: options: animations: completion:]:
cependant, je n'arrive pas à remplacer la courbe d'animation par défaut d'autre chose que EaseInOut.
la source
Voici une version Swift de la réponse de Karwag
la source
Pour moi, j'en avais besoin pour une collectionView. J'ai fait une simple extension pour résoudre ce problème:
la source
Comme la
performBatch
méthode de tableView est disponible à partir d' iOS 11 uniquement, vous pouvez utiliser l'extension suivante:la source
Vous pouvez essayer d'encapsuler le insertRowsAtIndexPath dans un
transaction, puis faites le flash par la suite.
la source