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
0
A
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.
1
Rufen Sie einfach Ihre scrollToRowAtIndexPath oder setContentOffset Methoden innerhalb +(void)animateWithDuration:animations: Block.
Schauen Sie sich diese Antworten für weitere Informationen:
Change the speed of setContentOffset:animated:?
scrollToRowAtIndexPath:atScrollPosition:animated scrolling too slow
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
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. –
Ja, versucht, dass. WOrks. – Avi