Desplácese mediante progtwigción un UITableView con aceleración y desaceleración

Estoy intentando desplazar un UITableView mediante progtwigción pulsando un button. Debería ser el mismo efecto al hacerlo a mano o incluso un poco más en el time de desplazamiento.

Primero traté de usar scrollToRowAtIndexPath: atScrollPosition: animated: sin embargo, es demasiado rápido y fijo a time. Además, no tiene aceleración ni desaceleración.

¿Alguna idea de cómo desplazar un UITableView mediante progtwigción ya que se ha desplazado a mano? Estaba pensando en enviarle algunos toques personalizados. ¿Crees que podría funcionar?

¡Cualquier idea y ayuda son muy apreciadas! ¡Gracias!

UITableview es una subclass de UIScrollview. Al igual que un UIScrollview, puede establecer mediante progtwigción la position de desplazamiento de UITableview estableciendo la propiedad contentOffset.

Cambia este valor de propiedad dentro de un bloque de animation para que tenga más control en el momento. Deberá calcular la position del punto Y. Digamos que desea desplazarse a la fila 50, puede ser 50 * rowHeight (suponiendo que es una altura uniforme).

Por ejemplo:

CGFloat calculatedPosY = 50 * rowHeight // do you own calculation of where you'd like it. [UIView animateWithDuration:0.2 animations:^{theTableview.contentOffset = CGPointMake(0.0, calculatedPosY);} completion:^(BOOL finished){ }]; 

Hay otro método que podría usar que proporciona más opciones también.

Eche un vistazo a este método:

 + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion 

Establezca su button en subvista de celda y use este código para desplazarse por la progtwigción mediante progtwigción en el evento táctil del button. Y si no está configurando el button como subview de la celda de la tabla, modifique este código según sea necesario.

  CGPoint point = [button.superview convertPoint:button.frame.origin toView:self.tableView]; CGPoint contentOffset = self.tableView.contentOffset; contentOffset.y += (point.y - contentOffset.y - self.navigationController.navigationBar.frame.size.height); // Adjust this value as you need [self.tableView setContentOffset:contentOffset animated:YES]; 

Bueno, estos son solo un par de respuestas "fuera de lo UITableView ", pero podría intentar usar este método (en UIScrollView , de las cuales UITableView es una subclass):

 -(void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated 

Una vez -(CGRect) rectForRowAtIndexPath: le da las coorderadas de la celda, luego puede animar a la location de la celda. Pero en lugar de llamarlo una vez, llámelo un par de veces con un desplazamiento más pequeño, luego con desplazamientos más grandes y luego uno más pequeño nuevamente. Sin embargo, me preocupa que sea difícil hacerlo parecer suave.

Aun así, si eso no funciona, tal vez cambiando el valor de UIView animateWithDuration:delay:options:animations:completion dentro de un UIView animateWithDuration:delay:options:animations:completion bloque de UIView animateWithDuration:delay:options:animations:completion funcionaría. Tal vez si usa UIViewAnimationOptionCurveEaseInOut, puede get el efecto que desea simplemente llamarlo una vez. Si no es así, ejecute varias animaciones cada parte del path y cubra distancias grandes y mayores antes de desacelerar.