【问题标题】:Why Won't My Image Rotate in Xcode?为什么我的图像在 Xcode 中不旋转?
【发布时间】:2011-03-29 11:07:17
【问题描述】:

我正在尝试制作一个简单的动画,当单击按钮时会连续旋转图像,但由于某种原因,当我单击按钮时,它会使应用程序崩溃。

这是我的代码。

.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

知道如何让它发挥作用吗?另外,让应用加载后立即开始动画的最佳方法是什么?

【问题讨论】:

  • 你检查过 sunray 是否不是 nil 吗?你在IB中正确连接了吗?
  • 如果它崩溃了,那么你的按钮可能连接不正确。请在崩溃后在控制台上提供消息。
  • 是的,错误代码在抛出“NSException”实例后被终止调用,我确实为按下按钮进行了内部修饰。
  • 永远不要直接发送dealloc消息。 [sunray release] 应该对任何人都足够了。

标签: iphone objective-c xcode ios4


【解决方案1】:

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

【讨论】:

  • 在我的控制台中我收到错误:在抛出“NSException”实例后调用终止
  • 你到底得到了什么异常?
  • 我拼错了创建动画的方法名称 - 它应该是 animationWithKeyPath,而不是 animationForKeyPath - 可能是问题所在?
【解决方案2】:

您可能错误地连接了动作或插座(如果您发布了更多控制台输出,我们可以肯定)。查看 Interface Builder 在您的操作/插座上是否有任何错误标记。

另请参阅我关于自己调用 dealloc 的评论 - 您不应该这样做,除了您自己的 dealloc 实现中的 [super dealloc]。

【讨论】:

  • 史蒂文 - 我已经搞定了动作和插座,但现在已经修复它,点击按钮现在什么都不做!
  • 你旋转了 2*PI -> 整圈
  • 尝试旋转 M_PI_2(这是一个预定义的常数,相当于 90 度)而不是 6.2831855
  • 这在我第一次单击旋转时有效,但在之后无效。是否有一个预定义的常数会导致图像连续旋转? (直到我点击停止按钮)
  • 转换不会“加起来”。每次设置转换时,都会覆盖之前的内容。每次点击按钮时只需增加角度(当然,您需要为此创建一个属性)。每次点击继续增加 90 度(或者更确切地说是 M_PI_2),超过 360 度没有问题。
【解决方案3】:

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

    -(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 rotate:90];以 90° 评价 或者你可以使用 [self rotate:0];不旋转你的图像;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多