我正在尝试做一个简单的动画,当单击按钮时会连续旋转图像,但出于某种原因,当我点击按钮时,它会使应用程序崩溃。
这是我的代码。
.h文件:
@interface MainView : UIView {
}
IBOutlet UIImageView *sunray;
- (IBAction)pushrotate:(id)sender;
@end
.m文件:
@implementation MainView
- (IBAction)pushrotate:(id)sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0];
sunray.transform = CGAffineTransformMakeRotation(6.2831855);
[UIView commitAnimations];
}
-(void) dealloc {
[sunray dealloc];
[sunray release];
[super dealloc];
}
@end
知道如何让它发挥作用吗?此外,在应用加载后立即启动动画的最佳方法是什么?
答案 0 :(得分:0)
如果将视图旋转角度设置为2 * PI的乘数(在您的情况下看起来如此),则视图会识别出变换实际上没有效果且视图不会旋转。
要通过角度旋转视图超过2 * PI,需要使用CoreAnimation动画。所以你的代码应该看起来像:
//link with QuartzCore.framework
#import <QuartzCore/QuartzCore.h>
...
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 1.0f;
[sanray.layer addAnimation:animation forKey:@"MyAnimation"];
答案 1 :(得分:0)
您可能将操作或插座连接错误(如果您发布了更多控制台输出,我们肯定会这样做)。查看Interface Builder是否在您的操作/出口上有任何错误标记。
另见我自己关于调用dealloc的评论 - 你不应该,除了你自己的dealloc实现中的[super dealloc]。
答案 2 :(得分:0)
这是我旋转图像的解决方案
-(void)rotate:(int)degree {
float rad = M_PI * (float)degree / 180.0;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
aktivImageView.transform = CGAffineTransformMakeRotation(rad);
[UIView commitAnimations];
}
我认为你也可以使用这个代码片段和按钮
在你的IBAction中你可以编码[self rotation:90];以90°的速度 或者你可以使用[self rotation:0];不旋转图像; - )