2009-09-14 103 views

回答

2

如果你的意思是,旋轉圖像?「你怎麼做的圖像追隨圓形路徑」,那麼僞是:

image.x = circleCentre.x + cos(angle) * circleRadius; 
image.y = circleCentre.y + sin(angle) * circleRadius; 
angle += 5; 
1

This question要求同樣的事情,儘管換言之。在這個問題中的答案以及this question應該提供一種方法來爲UIView(UIImageView僅僅是它的一個子類)創建一個關於360度或更多中心的動畫。

+0

也許你對旋轉和革命感到困惑。上述問題是關於革命的。 – Biranchi 2010-04-30 05:28:31

28

無論是小於完整旋轉還是多次旋轉,都可以將視圖旋轉一定數量的弧度,而無需將旋轉分割成幾部分。作爲一個例子,下面的代碼會在一個指定的秒數內旋轉一個視圖,每秒一次。您可以輕鬆修改它以旋轉一定數量的旋轉視圖,或旋轉一定數量的弧度。

- (void) runSpinAnimationWithDuration:(CGFloat) duration; 
{ 
    CABasicAnimation* rotationAnimation; 
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ]; 
    rotationAnimation.duration = duration; 
    rotationAnimation.cumulative = YES; 
    rotationAnimation.repeatCount = 1.0; 
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 

    [myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
} 
+0

我收到一個錯誤,「旋轉未聲明」 – abhinav 2009-09-15 06:17:44

+3

旋轉是一個常量。將其替換爲您希望視圖在持續時間內旋轉的次數。 – mahboudz 2009-09-17 11:31:57

3

基於mahboudz的回答,您可以將其設置設定爲無限旋轉:
rotationAnimation.repeatCount = HUGE_VALF;

1

創建動畫

- (CABasicAnimation *)spinAnimationWithDuration:(CGFloat)duration clockwise:(BOOL)clockwise repeat:(BOOL)repeats 
{ 
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    anim.toValue = clockwise ? @(M_PI * 2.0) : @(M_PI * -2.0); 
    anim.duration = duration; 
    anim.cumulative = YES; 
    anim.repeatCount = repeats ? CGFLOAT_MAX : 0; 
    return anim; 
} 

將它添加到一個視圖

CABasicAnimation *animation = [self spinAnimationWithDuration:1.0 clockwise:YES repeat:YES]; 
[self.spinningView.layer addAnimation:animation forKey:@"rotationAnimation"]; 

這個答案如何不同來自@ mahboudz的回答?如果大多數函數都返回對象,而不是僅僅操縱一些對象,那麼您將擁有更簡潔的代碼。