2

ボタンを 360 度 30 秒間回転させた後、ボタンの回転を停止する方法。

4

4 に答える 4

8

360回転アニメーションは、CoreAnimationを使用した数行のコードです。

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度の相対回転を実行します(from値とto値を明示的に指定する場合と比較して)。これは、上記のコードは、ボタンがすでに回転している場合でも、ボタンを360度回転させることを意味します。終了変換を明示的に指定するすべての回答は、ボタンがまだ回転していないことを前提としています。

上記の例は、あなたが要求したことを実行するために可能な限り小さくなっています(「30秒間360度回転する」)。より詳細な制御が必要な場合は、オプションで、タイミング関数を指定してアニメーションをゆっくり開始および/または停止させることができます。

rotate.timingFunction = 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 

プロジェクトにまだ追加していない場合は、追加QuarzCore.frameworkする必要があります。#import <QuartzCore/QuartzCore.h>ソースファイルの先頭にもあります。

于 2013-03-23T10:50:58.410 に答える
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 を含めることを忘れないでください!

于 2013-03-23T10:48:42.110 に答える
-1
[UIView animateWithDuration:.30f animations:^{
    btnGallery.transform = CGAffineTransformRotate(CGAffineTransformIdentity, -M_PI);
}];
于 2013-03-23T10:16:18.783 に答える