2016-06-04 14 views
0

Lets sagen, ich habe 10 Zeilen mit Zahlen von 1 bis 10. Ich brauche Scroll-Effekt wie 1 bis 10 zu 1 bis 10 ... Ich erreichte dies mit scrollToRowAtIndexPath und setContentOffset. Das Problem Ich möchte das Scrollen verlangsamen, bevor ich meine Logik anwenden, um diese Rekursion zu stoppen. Also gibt es eine Möglichkeit, dass ich die Scroll-Geschwindigkeit für scrollToRowAtIndexPath verringern kann. ? Bitte nicht vorschlagen, decelerationRate, da Scrolls hier alle programmatisch sind, keine Benutzerinteraktionen. Danke im Voraus.UITableView: scrollToRowAtIndexPath oder setContentOffset Animationsgeschwindigkeit

Antwort

0

Sie können etwas tun:

[UIView animateWithDuration:durationInSeconds animations:^(void){ 
    [tableView setContentOffset:offset animated:NO]; 
}]; 

Sie müssen nur den Offset zu berechnen. Wenn Ihre Zeilen gleicher Höhe, dann kompensieren die einfach berechnet:

CGPoint offset = CGPointMake(0, indexPath.row * rowHeight); 

und wenn die Höhe variiert, dann müssen Sie dies tun:

CGFloat offsetY = 0; 

for (NSInteger i = 0; i <= indexPath.row; i++) { 
    offsetY += [tableView.delegate tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 

CGPoint offset = CGPointMake(0, offsetY); 

EDIT:

Sie auch verwenden können scrollToRowAtIndexPath:animated: Methode mit animated auf NO im Animationsblock anstelle von setContentOffset festgelegt, und dann müssen Sie den Offset nicht selbst berechnen.

+0

Klingt gut. Meinst du, sobald ich mich dazu entschließe, langsamer zu werden, komme ich aus meiner kreisförmigen Scroll-Rekursionslogik heraus und mache das obige, um meine beabsichtigte Zeile zu erreichen, die einen langsamen Scroll-Effekt ergibt? – Avi

+0

Ja, dies verlangsamt den Bildlauf und Sie legen die Dauer mit dem Parameter 'durationInSeconds' in der animateWithDuration-Methode fest. Wie Alex in einer anderen Antwort vorgeschlagen hat, können Sie auch scrollToRowAtIndexPath: animated: method mit animierter Menge im Animationsblock anstelle von setContentOffset auf NO setzen, und dann müssen Sie den Offset nicht selbst berechnen. –

+0

Ja, versucht, dass. WOrks. – Avi