2013-08-06 69 views
3

我有一個圖像,我想旋轉360°(順時針),然後重複,並且遇到了麻煩以正確方式執行此操作。我可以這樣做:創建一個旋轉的動畫

  UIView.Animate(1, 0, UIViewAnimationOptions.Repeat, 
      () => 
      { 
       LoadingImage.Transform = MonoTouch.CoreGraphics.CGAffineTransform.MakeRotation(-(float)(Math.PI)); 
      }, 
      () => 
      { 
      }); 

其使我的形象,180°,然後迅速回到開始和重複。所以,我想如果我做的是像1.99 * PI那樣的東西,它幾乎會一直旋轉,可能看起來不錯。不幸的是,這個動畫系統比這個聰明,而且只會朝相反的方向旋轉!

那麼讓圖像連續旋轉360°的正確方法是什麼?

更新

隨着幫助或Eric的評論,我有這樣的:

 CABasicAnimation rotationAnimation = new CABasicAnimation(); 
     rotationAnimation.KeyPath = "transform.rotation.z"; 
     rotationAnimation.To = new NSNumber(Math.PI * 2); 
     rotationAnimation.Duration = 1; 
     rotationAnimation.Cumulative = true; 
     rotationAnimation.RepeatCount = 10; 
     LoadingImage.Layer.AddAnimation(rotationAnimation, "rotationAnimation"); 

哪個不旋轉360°,10次在我的例子(見RepeatCount),但我沒有看到一種方法來告訴它重複,直到我停止它。 CABasicAnimation有一個RepeatCountRepeatDuration,但似乎沒有一個屬性告訴它只是不斷重複。我可以設置RepeatCount某些適當的高價值,它會繼續旋轉,直到用戶有可能失去興趣,但這似乎並不是一個很好的解決方案。

+1

這有幫助嗎? http://stackoverflow.com/a/9845530/1350424 – eclipsis

+0

@EricMatthewTurano:也許 - 我只需要看看我是否可以從Objective-C翻譯。 –

回答

10

看起來像改編自埃裏克提供模樣的最佳選擇鏈接方案:

CABasicAnimation rotationAnimation = new CABasicAnimation(); 
    rotationAnimation.KeyPath = "transform.rotation.z"; 
    rotationAnimation.To = new NSNumber(Math.PI * 2); 
    rotationAnimation.Duration = 1; 
    rotationAnimation.Cumulative = true; 
    rotationAnimation.RepeatCount = float.MaxValue; 
    LoadingImage.Layer.AddAnimation(rotationAnimation, "rotationAnimation"); 

套裝RepeatCountfloat.MaxValue有效保持它永遠重複(爲什麼計數是float而非int仍然是一個謎)。

0

嘗試animation.repeatCount = HUGE_VALF;

0

我認爲重複計數的原因是浮動是爲了允許動畫的部分週期。也許你想要一個圓圈通過脈動來動畫,但是停在你開始的另一端。