2010-11-04 23 views
1

我設立一個簡單的UISlider動畫它的表現層的進度:查詢UISlider

[UIView animateWithDuration:songLength 
     delay:0.0 
     options:UIViewAnimationOptionRepeat| 
     UIViewAnimationOptionAllowUserInteraction| 
     UIViewAnimationOptionBeginFromCurrentState 
     animations:^{ 
     [UIView setAnimationDuration:10.0]; 
     [myUISlider setValue:10.0]; 
     } completion:nil 
    ]; 

    [UIView commitAnimations]; 

當用戶按下一個按鈕,我想停止動畫在它的地方。

我明白我需要查詢表示層找出值,但是,表示層是類型CALayer而不是UISlider。因此,它具有圖層屬性,如它在屏幕上的x/y位置,而不是滑動條本身的值。

有意義的是,通過設計,表示層可以訪問層的所有當前動畫數據,但我不知道如何在代碼中工作。

有什麼想法?

回答

0

我想出瞭解決這個問題的一種方法,以防你處理同樣的問題。 在設計上,沒有明顯的方法來查詢UISlider的動畫拇指。動畫查詢對於圖層來說效果很好,所以一種方法是創建自己的背景併爲拇指設置動畫層。

我工作的方式是使用NSTimer類。一旦我想要進度條開始動畫,我設置一個0.1秒間隔的NSTimer並調用一個函數來更新拇指位置。拇指之前/之後的動畫(因爲它前進的左邊部分是藍色,剩下的仍然是白色)將自動照顧您。

這裏是代碼:

updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES]; 

所以每一個第二的0.01調用此方法,它重繪拇指,從而創建動畫。不需要動畫塊。

這個效果很好,我對結果很滿意。我關心的是性能,並且會衡量這種實現的資源密集程度。與我上面提到的第一個選項一起使用可能是一個好主意。