2013-03-23 79 views

回答

6

360度旋轉動畫只是Core Animation的幾行代碼。

CABasicAnimation *rotate = 
    [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
rotate.byValue = @(M_PI*2); // Change to - angle for counter clockwise rotation 
rotate.duration = 30.0; 

[yourButton.layer addAnimation:rotate 
         forKey:@"myRotationAnimation"]; 

通過使用byValue財產你正在做360度旋轉什麼是有一個相對旋轉之前(相對於顯式指定從和值)。這意味着即使已經旋轉了,上面的代碼也會將按鈕旋轉360度。所有明確指定結束轉換的答案都假定該按鈕尚未旋轉。

上面的例子儘可能小地做你剛纔所要求的(「360度旋轉,持續時間30秒」)。如果你想有更多的控制,你可以選擇做動畫的開始和/或通過指定計時功能慢慢停止

rotate.timingFunction = 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 

如果您尚未添加QuarzCore.framework到你的項目,你需要做的所以。另外#import <QuartzCore/QuartzCore.h>在您的源文件的頂部。

-1
[UIView animateWithDuration:.30f animations:^{ 
    btnGallery.transform = CGAffineTransformRotate(CGAffineTransformIdentity, -M_PI); 
}]; 
+0

@rushi不工作 – 2013-03-23 10:30:39

+0

抱歉rushi,我剛剛編輯了代碼並進行了測試。現在檢查一下。根據您的要求調整旋轉角度。 – 2013-03-23 10:43:01

0
CATransform3D myRotationTransform = CATransform3DRotate(Yourbutton.layer.transform, -1, 0.0, 0.0, 1.0); 
Yourbutton.layer.transform = myRotationTransform; 

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
animation.fromValue = [NSNumber numberWithFloat:0.0f]; 
animation.toValue = [NSNumber numberWithFloat: -1]; 
animation.duration = 30; 
animation.repeatCount = 1; 
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
[Yourbutton.layer addAnimation:animation forKey:@"MyAnimation"]; 

應該努力!不要忘記包含quartz.framework!

+0

在這種情況下,由於360度旋轉與0度旋轉相同,因此無需在完成時移除動畫。 – 2013-03-23 10:55:38

+0

是的,這就是爲什麼我將removedOnCompletion設置爲NO! – 2013-03-23 11:06:22

+0

......「不需要**不刪除」=「你也可以刪除」(意思是'removedOnCompletion = YES;'或者只是刪除那行,因爲'YES'是默認的。) – 2013-03-23 11:09:07

0

好吧,我只是用

被self.buttonImageView你需要旋轉ImageView的。

[UIView animateKeyframesWithDuration:0.5 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{ 

    [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.25 animations:^{ 
     self.buttonImageView.transform= CGAffineTransformMakeRotation(M_PI); 
    }]; 

    [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.25 animations:^{ 
     self.buttonImageView.transform= CGAffineTransformMakeRotation(-2* M_PI); 
    }]; 


} completion:^(BOOL finished) { 

    [self.map setCenterCoordinate:self.map.userLocation.location.coordinate animated:YES]; 
    self.buttonImageView.transform= CGAffineTransformMakeRotation(2* M_PI); 
}];