我有一个.png格式的轮子图像,我想知道我怎么能动画让它连续旋转,我在stackoverflow上搜索并找到某些代码片段,它帮助我旋转我的图像,但它不会连续旋转,它只会旋转几秒钟并停止,代码如下
viewdidload
中的代码UIImageView *imageToMove =
[[UIImageView alloc] initWithImage:[UIImageimageNamed:@"horo_circle.png"]];
[self.view addSubview:imageToMove];
[self rotateImage:imageToMove duration:5.0
curve:UIViewAnimationCurveEaseIn degrees:180];
和动画
- (void)rotateImage:(UIImageView *)image duration:(NSTimeInterval)duration
curve:(int)curve degrees:(CGFloat)degrees
{
// Setup the animation
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:curve];
[UIView setAnimationBeginsFromCurrentState:YES];
// The transform matrix
CGAffineTransform transform =
CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(degrees));
image.transform = transform;
// Commit the changes
[UIView commitAnimations];
}
以及导入后的以下行
#define M_PI 3.14159265358979323846264338327950288 /* pi */
#define DEGREES_TO_RADIANS(angle) (angle / 180.0 * M_PI)
答案 0 :(得分:48)
您最好使用CABasicAnimation
:
if ([self.spinnerOverlay animationForKey:@"SpinAnimation"] == nil) {
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 10.0f;
animation.repeatCount = INFINITY;
[self.spinnerOverlay.layer addAnimation:animation forKey:@"SpinAnimation"];
}
在此代码中,我检查动画是否全部准备就绪,不需要再次设置。
在您的情况下,spinnerOverlay
是您想要轮播的UIImageView
。
停止动画:
[self.spinnerOverlay.layer removeAnimationForKey:@"SpinAnimation"];
答案 1 :(得分:3)
下面的代码将连续旋转一个名为 iconView 的 UIImageView ,直到 rotate == NO 。
图像将始终返回其原始位置。
FameLayout
这是同一主题的变体。
(总持续时间:2 * 0.5 =旋转1秒)
像魔术一样工作!
答案 2 :(得分:2)
这是另一种使用计时器的方法。 在viewController.h文件中,您需要声明您的计时器和图像:
@interface ViewController : UIViewController
{
IBOutlet UIImageView *spinningImage;
NSTimer *spinTimer;
}
接下来,在ViewController.m中,添加此代码,可以通过降低时间间隔或增加转换间隔来加快旋转速度。
-(void) viewDidLoad {
spinTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target: self selector:@selector(spinVoid) userInfo:nil repeats:YES];
}
-(void) spinVoid {
spinningImage.transform = CGAffineTransformRotate(spinningImage.transform, 0.001);
}
希望这有帮助!
答案 3 :(得分:1)
现在我们在iOS6上,请考虑切换到基于块的动画(自iOS 4.0起可用)而不是传统方法。试试这个:
[UIView animateWithDuration:duration delay:0.0 options:UIViewAnimationOptionRepeat animations:^{
image.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(degrees));
} completion:nil];
答案 4 :(得分:-1)
使用您为动画选择的方法:
[UIView setAnimationRepeatCount:10000000];
或者,您可以在块方法UIViewAnimationOptionRepeat
animateWithDuration:delay:options:animations:completion:
标志