¿Hay alguna manera de especificar la duración de las animaciones de fila de UITableView o de obtener una devolución de llamada cuando se completa la animación?
Lo que me gustaría hacer es hacer parpadear los indicadores de desplazamiento después de que se complete la animación. Hacer el flash antes de eso no hace nada. Hasta ahora, la solución que tengo es retrasar medio segundo (que parece ser la duración predeterminada de la animación), es decir:
[self.tableView insertRowsAtIndexPaths:newRows
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView performSelector:@selector(flashScrollIndicators)
withObject:nil
afterDelay:0.5];
ios
iphone
uitableview
animation
cocoa-touch
Daniel Dickison
fuente
fuente
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath
Respuestas:
Hoy en día, si desea hacer esto, hay una nueva función a partir de iOS 11 :
En los cierres de actualizaciones, coloca el mismo código que en la sección beginUpdates () / endUpdates. Y la finalización se ejecuta después de todas las animaciones.
fuente
Acabo de encontrarme con esto. He aquí cómo hacerlo:
C objetivo
Rápido
fuente
setAnimationDuration
no parece afectar la duración de inserción / eliminación. iOS 6Ampliando la excelente respuesta de karwag , tenga en cuenta que en iOS 7, rodear la transacción CAT con una animación UIView ofrece control de la duración de la animación de la tabla.
La duración de la animación de UIView no tiene efecto en iOS 6. Quizás las animaciones de tabla de iOS 7 se implementan de manera diferente, en el nivel de UIView.
fuente
¡Ese es un truco increíblemente útil! Escribí una extensión UITableView para evitar escribir cosas CATransaction todo el tiempo.
Esto se usa así:
fuente
setCompletionBlock
que es iOS 4+Acortando la buena respuesta de Brent , para al menos iOS 7 puede envolver todo esto concisamente en una llamada [UIView animateWithDuration: delay: options: animations: complete:]:
sin embargo, parece que no puedo anular la curva de animación predeterminada de otra cosa que no sea EaseInOut.
fuente
Aquí hay una versión rápida de la respuesta de karwag.
fuente
Para mí, necesitaba esto para un collectionView. Hice una extensión simple para resolver esto:
fuente
Como el
performBatch
método de tableView está disponible solo a partir de iOS 11 , puede usar la siguiente extensión:fuente
Podría intentar envolver el insertRowsAtIndexPath en un
transacción, luego haga el flash después.
fuente