nueva solución (2017-12-12)
Adición de un Swift versión 4,0 del método animado. A continuación, debe aplicarse de la misma manera como la solución a continuación:
func animate() {
for cell in self.tableView.visibleCells {
cell.frame = CGRect(x: self.tableView.frame.size.width, y: cell.frame.origin.y, width: cell.frame.size.width, height: cell.frame.size.height)
UIView.animate(withDuration: 1.0) {
cell.frame = CGRect(x: 0, y: cell.frame.origin.y, width: cell.frame.size.width, height: cell.frame.size.height)
}
}
}
NUEVOS SOLUCIÓN (2015-09-05)
Adición de una versión Swift 2.0 del método animado. A continuación, debe aplicarse de la misma manera como la solución a continuación:
func animate() {
for cell in self.tableView.visibleCells {
cell.frame = CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)
UIView.animateWithDuration(1.0) {
cell.frame = CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)
}
}
}
NUEVA SOLUCIÓN (2014-09-28)
volví a trabajar la solución un poco para hacer la aplicación más fácil y para hacer que funcione con iOS8. Todo lo que necesita hacer es añadir este método animate
en su TableViewController y llamarlo siempre que lo desee para animar (por ejemplo, en el método de recarga, pero se le puede llamar en cualquier momento):
- (void)animate
{
[[self.tableView visibleCells] enumerateObjectsUsingBlock:^(UITableViewCell *cell, NSUInteger idx, BOOL *stop) {
[cell setFrame:CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
[UIView animateWithDuration:1 animations:^{
[cell setFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
}];
}];
}
De nuevo , cambia la animación como quieras Este código particular animará las celdas desde la derecha a una velocidad lenta.
antigua solución (2013-06-06)
Usted puede hacer esto mediante la implementación de su propio UITableView y reemplazando el método insertRowsAtIndexPaths. Aquí es un ejemplo de cómo podría parecerse a la que las células serán empujados desde la derecha, muy lentamente (1 segundo de animación):
- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
{
for (NSIndexPath *indexPath in indexPaths)
{
UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];
[cell setFrame:CGRectMake(320, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
[UIView beginAnimations:NULL context:nil];
[UIView setAnimationDuration:1];
[cell setFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
[UIView commitAnimations];
}
}
se puede jugar con las animaciones usted mismo. La vista de tabla no llamará automáticamente a este método, por lo que debe anular el método reloadData en su delegado de vista de tabla y llamar a este método usted mismo.
COMENTARIO
El método reloadData debería ser algo como esto:
- (void)reloadData
{
[super reloadData];
NSMutableArray *indexPaths = [[NSMutableArray alloc] init];
for (int i = 0; i < [_data count]; i++)
[indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
[self insertRowsAtIndexPaths:indexPaths withRowAnimation:0];
}
Gracias! Funciona de maravilla. –
¿Se trata simplemente de anular el método 'insertRowsAtIndexPaths: withRowAnimation:'? Cuando lo reemplazo y luego llamo con el método 'beginUpdates:' y 'endUpdates:', la aplicación falla en '[UITableView _endCellAnimationsWithContext:]' –
Vea mi edición ... –