2013-11-04 39 views
5

我有谷歌和搜索它,但沒有找到任何在互聯網上解決我的問題,但我認爲我的問題將超級容易解決,但我找不到正確的關鍵字爲它。UILabel自動滾動功能

我有一個viewcontroller,其中包含一個名爲ReadingView的文本,該文本具有非常長的文本以便能夠滾動以讀取文本。當用戶進入ReadingView,它本身將自動滾動下到谷底,用戶可以增加UISlider我實現

的問題是,我可以通過這個代碼

[UIScrollView beginAnimations:@"scrollAnimation" context:nil]; 
[UIScrollView setAnimationDuration:1.0f]; 
[scroll setContentOffset:CGPointMake(x, y)]; 
[UIScrollView commitAnimations]; 
做自動滾動沒有任何問題滾動的速度

但上面的代碼是基於時間的。我必須找到基於幀或像素的動畫。因爲,如果我使用基於時間的動畫,一些文本會很長,它會非常快速地向下滾動到底部,而短文本會很慢。

。你們有什麼想法,如果我能做到像動畫

「嘿滾動視圖,每一幀你必須10像素向下移動,直至 上下文的結束,我不在乎多久是否需要,修正速度!!「

感謝你的幫助,你們可以通過給我由Fogmeister的建議完成關鍵字或任何

UPDATE 幫助我。 這個概念是使用塊動畫,並通過使用 時間=文本長度/速度 來計算每個文本的時間,並且您將獲得每個文本的不同時間並使用該時間來執行動畫。我從來沒有想到這一點....我一直在尋找的是PIXEL做動畫的功能,這是一個錯誤的關鍵字。

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

根據uilabel中的總行數設置setAnimationDuration – NANNAV

+0

不應在iOS 4或更高版本中使用此動畫方法。你應該在我的回答中使用基於塊的動畫。 – Fogmeister

回答

3

OK,第一,你不應該使用CABasicAnimation。最佳實踐方法是使用基於塊的動畫。

其次,這應該相當容易。

可以計算最大滾動視圖的偏移......

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

這是一個可以應用滾動的最高金額。即距離。

現在,制定一個持續時間(時間),你需要有一個速度。可以說每秒50分。

所以,現在讓我們把它一起...

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); 
}]; 

顯然,這是橫向滾動,如果你想豎就用不同的值。

快速編輯

上述動畫函數使用默認的動畫曲線,該曲線是UIAnimationOptionCurveEaseInOut。這將意味着滾動速度將從0開始緩慢加速,然後在最後緩慢減速回到0。

你可能會想要的是一個線性運動。即滾動的速度始終相同。要做到這一點,你需要一個與上述不同的功能。它只是增加了一些額外的參數...

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

這將做到你想要的線性運動。

+1

謝謝!!!我明天會測試它。並會告訴結果。 – Einzeln

+0

太棒了!謝謝。我用你的方法來計算文本的總高度並按UISlider的速度進行分割。我知道這應該是超級容易的,但這麼笨!哈哈謝謝。 – Einzeln

+0

不用擔心。我總是覺得自己想得太多,並且做出非常複雜的簡單問題。很高興我能幫上忙 :) – Fogmeister