Frage

Ich habe eine UITextView, die viel Inhalt hat. Ich habe einen Knopf, den die UITextView automatisch ermöglicht + 10 Pixel in einer NSTimer Schleife blättern:

scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 10);
[textView setContentOffset:scrollPoint animated:YES];   

Das funktioniert wirklich gut, wie die Animation der Scroll ziemlich glatt macht. Ich möchte dem Benutzer erlauben, durch Scrollen mit dem Finger zu überspringen vorne oder nach hinten, aber aufgrund dieser Code nach der Scroll-Animation, die Rolle zu schnappt zurück, wo sie automatisch gescrollt haben würde.

Ich brauche die Scroll Variable nach einem manuellen blättern zurückgesetzt, aber ich bin nicht sicher, wie das zu tun. Ich habe versucht, die Delegatmethode Umsetzung

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;

Aber diese Methode Feuer auf meinem automatischen Scroll-als auch.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Sie können es einfach bewegen machen in Bezug auf, wo es ist:

scrollPoint = textView.contentOffset;
scrollPoint.y= scrollPoint.y+10;
[textView setContentOffset:scrollPoint animated:YES];

Andere Tipps

Ich wollte das Gleiche tun versuchen Sie Ben zu tun, aber ich fand, dass die Animation in Bezug auf die Anzeigezeit zu teuer war und schien den Zweck zu besiegen. Ich spielte mit ihm um und fand der folgende Code genau das tut, was Sie es tun wollten und nicht biegt das System überhaupt unten.

Einstellungen

if (autoscrollTimer == nil) {
  autoscrollTimer = [NSTimer scheduledTimerWithTimeInterval:(35.0/1000.0)
                                                     target:self
                                                   selector:@selector(autoscrollTimerFired:) 
                                                   userInfo:nil 
                                                    repeats:YES];
}

Der Schlüssel ist, um die Animation OFF beim Drehen und den Versatz in kleineren Schritten zu bewegen. Es scheint, schneller zu laufen und es nicht mit dem manuellen Scroll stören.

- (void)autoscrollTimerFired:(NSTimer*)timer {
   CGPoint scrollPoint = self.textView.contentOffset;
   scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1);
   [self.textView setContentOffset:scrollPoint animated:NO];
}

Ich bin ziemlich neu in Objective-C und iphone Entwicklung also, wenn jemand mit mehr Erfahrung ein Problem mit diesem Ansatz sieht würde ich ein Feedback zu schätzen wissen.

Ich denke, effektiv 2 Möglichkeiten, indem er den Inhalt Ihrer Art des Kampfes gegen die API zu blättern.

Wenn ich es richtig, in Ihrem aktuellen Setup verstehen haben Sie auf eine Schaltfläche, die eine Animation ausgelöst.

Wenn Sie auf diese Weise bewegen, wird eine Animation auf einem anderen Thread erstellt und ausgeführt. Während die Animation läuft, wird die Präsentationsschicht verändert wird. Allerdings Offset der eigentliche Inhalt ist nicht gesetzt, bis die Animation abgeschlossen ist.

Das funktioniert gut und transparent, bis Sie versuchen, die gleiche Eigenschaft zu animieren, während es bereits animiert wird, wird.

Normalerweise wird in diesem Fall, dass Sie die vorhandenen Animationen zu löschen, setzen Sie den Rahmen an die Präsentationsschicht (aktuelle Bildschirmposition), dann die neue Animation anwenden.

Sie sind jedoch mit einer bequemen Methode der Textview (setContentOffset: animieren :). Wenn Sie dies tun geben Sie feine Animationssteuerung auf, im Austausch für weniger Zeilen Code.

Ich denke, dass eine Rolle in Fortschritt zu stoppen hart sein kann, oder unmöglich, den höheren Level-APIs verwenden. Dies bedeutet, zu tun, was Sie wollen, Sie würden mindestens eine UIView Animation Block versuchen müssen und höchstwahrscheinlich tatsächlich eine CAAnimation erstellen.

Die einfachere Lösung ist auf ein Mittel zum Scrollen Ihrer Textview zu begleichen. Die HIG begünstigt direkte Manipulation auf dem iPhone. Auch wenn es das Buch führen beide Richtungen leicht ist, würde ich empfehlen die Schaltfläche Methode Notwasserung, und verwenden Sie nur die direkte Manipulation Sie jetzt die Umsetzung sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top