为什么我的图像不能在Xcode中旋转?

问题描述:

我试图做一个简单的动画,当点击一个按钮时会不断旋转图像,但由于某种原因,当我点击按钮时会使应用程序崩溃。为什么我的图像不能在Xcode中旋转?

这是我的代码。

.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

你检查sunray不是零吗?你有没有在IB中正确连接它? – HeikoG 2011-03-29 11:11:55

+0

如果它崩溃,那么你可能已经错误地连接了你的按钮。请在崩溃后在控制台上提供消息。 – Tommy 2011-03-29 11:19:50

+0

是的错误代码是抛出一个'NSException'的实例后调用终止,我确实触摸了按钮按下。 – Ian 2011-03-29 11:30:31

如果您将视图旋转角度设置为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"]; 
+0

在我的控制台中,我收到错误:抛出'NSException'的实例后调用终止。 – Ian 2011-03-29 11:30:00

+0

你会得到什么异常? – Vladimir 2011-03-29 11:33:00

+0

我拼错的方法名称来创建动画 - 它应该是animationWithKeyPath,而不是animationForKeyPath - 可能是这样的问题? – Vladimir 2011-03-29 11:36:00

你可能有线的动作或出口错了(如果你贴得更控制台输出,我们可以肯定的)。查看Interface Builder是否在您的动作/插座上有任何错误标记。

另请参见我的关于调用dealloc自己的注释 - 除了[super dealloc]在您自己的dealloc实现中,您不应该这么做。

+0

史蒂文 - 我已经竖起了行动和网点,但现在已经修复它,并且点击按钮现在不做任何事情! – Ian 2011-03-29 12:45:53

+0

您正在旋转2 * PI - >整圆 – 2011-03-29 12:50:42

+0

尝试通过M_PI_2(这是一个预定义的常数,相当于90度)旋转而不是6.2831855 – 2011-03-29 12:51:58

这里是我的解决方案,以旋转图像

-(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为你代码[自旋转:90]。在90° 率或您可以使用[自我旋转:0];以不旋转您的图像;-)