2011-07-20 159 views
2

我有一個UIViewControler 4層。的用核心動畫/ CALayers動畫時鐘

  1. 面盤一個手錶/時鐘
  2. 二手
  3. 分針
  4. 時針

我已經得到了每手開始在正確的時間移動的onload(由根據應用程序加載的時間定義一個圓上的角度)。

如何使用CABasicAnimation訪問器方法正確定義運動的運動和持續時間(應該是無窮無盡的)?

例如,我已經設置我的secondHandMotion(這是一個實例化的CABasicAnimation對象)是在對應於當前時間的時鐘框架上的角度:

CABasicAnimation *secondHandMotion = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
secondHandMotion.fromValue = [NSNumber numberWithFloat:sAlpha]; 
secondHandMotion.toValue = [NSNumber numberWithFloat:(2*M_PI)]; 
[secondHand addAnimation:secondHandMotion forKey:@"transform"]; 

其中sAlpha是角度作爲時間的功能。 secondHandMotion.toValue聲明是錯誤的,我知道。我如何告訴它繼續移動,並且在正確的時間間隔內持續1秒?

謝謝!

+0

好的,所以如果我加上:secondHandMotion.duration = 60.0',我得到它第二個手柄在60秒內完成一個完整的循環,但是它停止了,因爲我不知道如何繼續它(永遠)在一個2-pi循環之後。 – ArtSabintsev

回答

5

當我實現了這個在我的應用程序之一,我從這個教程

Analog Clock using Quartz Core 斷開鏈接

See Source on Github instead.

它重新計算每一秒都可能發出有關稍微更精確的結果開始到系統時鐘。

我實現旋轉的方式就像這樣(這是動畫部分,您仍然需要先前完成的角度計算)。

CGAffineTransform transform = CGAffineTransformIdentity; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 

self.hourView.transform = CGAffineTransformRotate(transform, hourAngle); 
self.minView.transform = CGAffineTransformRotate(transform, minutesAngle); 
self.secondView.transform = CGAffineTransformRotate(transform, secondsAngle); 

[UIView commitAnimations]; 

注意:我很早就在iOS上寫了這個,所以它可能有點恐怖。

+0

是的,這也是我用來得到關於如何從時鐘運動獲取角度的想法。現在的問題是動畫png文件。我讓它們移動,但僅限於2-pi環路,而不是以正確的旋轉速度。 – ArtSabintsev

+0

對不起,我剛剛找到教程,我忘了它沒有旋轉圖像。看到我編輯的答案。 –

+0

這加上朋友的類似建議,解決了我的問題。謝謝! – ArtSabintsev