2013-11-04 10 views
5

Ich habe google und Suche danach, aber habe nichts im Internet gefunden, um mein Problem zu lösen, aber ich denke, mein Problem wird super einfach zu lösen sein, aber ich kann nicht das richtige Keyword finden es.Autoscrolling-Funktion für UILabel

Ich habe einen Viewcontroller, der einen Text namens ReadingView enthält, eine Ansicht, die einen sehr langen Text hat, um scrollen zu können, um Text zu lesen. Wenn der Benutzer in ReadingView gehen, wird es von selbst nach unten Automatischer Bildlauf nach unten, kann der Benutzer Geschwindigkeit von UISlider Scrollen erhöhen, die i

das Problem implementiert ist, ich Autoscrolling ohne Probleme durch diesen Code tun können

[UIScrollView beginAnimations:@"scrollAnimation" context:nil]; 
[UIScrollView setAnimationDuration:1.0f]; 
[scroll setContentOffset:CGPointMake(x, y)]; 
[UIScrollView commitAnimations]; 

, aber der Code oben basiert auf der Zeit. Ich muss eine Animation basierend auf Rahmen oder Pixel finden. Da ein Text sehr lang ist, wenn ich Animation basierend auf der Zeit verwende, scrollt er sehr schnell nach unten, während der kurze Text sehr langsam ist.

Haben Sie Jungs eine Ahnung, wenn ich um 10 Pixel bis das Ende der inhaltlichen „Animation wie

Hey Scroll tun können, müssen alle FRAME Sie nach unten zu bewegen und ich sorge mich nicht, wie lange es dauert, Fixed die Geschwindigkeit !! "

Vielen Dank für Ihre Hilfe, ihr Jungs mich

indem sie mir ein Stichwort oder irgendetwas helfen könnte

UPDATE Geschehen von Fogmeister des empfehlen. Das Konzept ist verwenden Blockanimation und berechnen Sie die Zeit für jeden Text mit time = Textlänge/Geschwindigkeit und Sie erhalten unterschiedliche Zeit von jedem Text und verwenden Sie diese Zeit, um Animation zu tun. Ich denke nie darüber nach .... was ich die ganze Zeit suche, ist die Animation von PIXEL, was ein falsches Schlüsselwort ist.

CGFloat scrollingPointSpeed = myslider.value; //value of UI Slider// 
CGFloat time = offset/scrollingPointSpeed ; 
[UIView animateWithDuration:time delay:0.0 options:UIViewAnimationOptionCurveLinear animation:^() 
{ 
self.scroll.contentOffset = CGPointMake(0, offset); 
} 
completion:nil]; 
+0

set setAnimationDuration basierend auf der Gesamtzahl der Zeilen in uilabel – NANNAV

+0

Diese Methode der Animation sollte nicht in iOS 4 oder höher verwendet werden. Sie sollten blockbasierte Animationen wie in meiner Antwort verwenden. – Fogmeister

Antwort

3

OK, zuerst sollten Sie nicht CABasicAnimation werden. Die beste Methode besteht darin, blockbasierte Animationen zu verwenden.

Zweitens sollte dies ziemlich einfach sein.

Sie das Maximum einer Scroll-Ansicht Offset berechnen kann ...

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame); 

Dies ist die maximale Menge an Scroll, die angewendet werden können. d.h. die Entfernung.

Jetzt, um eine Dauer (Zeit) zu erarbeiten, müssen Sie eine Geschwindigkeit im Kopf haben. Sagen wir 50 Punkte pro Sekunde.

lässt es also jetzt zusammen ...

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame); 

CGFloat scrollingPointsPerSecond = 50.0; 

CGFloat time = maxOffsetWidth/scrollPointsPerSecond; 

[UIView animateWithDuration:time 
       animations:^() { 
    self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0); 
}]; 

Offensichtlich ist dies für horizontales Scrollen ist, wenn Sie vertikale wollen, dann verwenden Sie einfach die verschiedenen Werte.

QUICK EDIT

Die obige Animation Funktion verwendet die Standard-Animationskurve, die UIAnimationOptionCurveEaseInOut ist.Dies bedeutet, dass die Geschwindigkeit der Scroll langsam von 0 am Anfang beschleunigt und dann am Ende langsam wieder auf 0 zurückgeht.

Was Sie wahrscheinlich wollen, ist eine lineare Bewegung. d.h. die Geschwindigkeit der Schriftrolle ist den ganzen Weg gleich. Um dies zu tun, brauchen Sie eine etwas andere Funktion als die obige. Es fügt nur ein paar zusätzliche Parameter hinzu ...

[UIView animateWithDuration:time 
         delay:0.0 
        options:UIViewAnimationOptionCurveLinear 
        animation:^() { 
         self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0); 
        } 
       completion:nil]; 

Dies wird genau das tun, was Sie mit einer linearen Bewegung wollen.

+1

Danke !!! Ich werde es morgen testen. und wird das Ergebnis erzählen. – Einzeln

+0

Super !!! Danke. Ich habe Ihre Methode verwendet, um die Gesamthöhe von Text zu berechnen und durch die Geschwindigkeit von UISlider zu teilen. Ich weiß, es sollte super einfach so sein, aber so dumm !! haha danke. – Einzeln

+0

Keine Sorge. Ich denke immer zu viel und mache wirklich einfache Probleme sehr kompliziert. Froh, dass ich helfen konnte :) – Fogmeister