iOS中的Imageview旋转问题

时间:2013-09-14 12:36:41

标签: ios image button rotation quartz-2d

我有下一个任务:按钮点击图片必须旋转到90度。

我的代码是:

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIImageView *vector;
@end

======

@interface ViewController ()

@end

@implementation ViewController
@synthesize vector;

- (void)viewDidLoad
{
    [super viewDidLoad];
}
- (IBAction)rotateOn:(id)sender {
    [self rotateImage:self.vector duration:2
                curve:UIViewAnimationCurveEaseIn degrees:M_PI/2];
}

- (void)rotateImage:(UIImageView *)image duration:(NSTimeInterval)duration
              curve:(int)curve degrees:(CGFloat)degrees
{
    // Setup the animation
    [UIView beginAnimations:NULL context:NULL];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:curve];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [image.layer setAnchorPoint:CGPointMake(0.5,0.5)];
    CGAffineTransform transform =
    CGAffineTransformMakeRotation(degrees);
    image.transform = transform;
    [UIView commitAnimations];
}




在点击按钮之前我有这个

Before Click


点击此后

After Click

您可以看到图像旋转到90度。但它从开始中心点向下移动。 此外,如果我再次点击按钮没有任何反应。

4 个答案:

答案 0 :(得分:1)

我假设您正在使用iOS6和故事板,尝试在故事板中禁用自动布局并再次测试动画。
如果它有效,并且想要保持自动布局功能,则需要调整约束

顺便说一下,默认anchorPoint已经是(0.5, 0.5),不需要该行(除非您在其他地方修改anchorPoint):

[image.layer setAnchorPoint:CGPointMake(0.5,0.5)];

答案 1 :(得分:1)

内部旋转按钮方法使用此代码将图像旋转90°

static int numRot = 0;
myimage.transform = CGAffineTransformMakeRotation(M_PI_2 * numRot);
++numRot;

答案 2 :(得分:0)

删除此行:

  [image.layer setAnchorPoint:CGPointMake(0.5,0.5)];

它实际上没有做任何事情,因为{0.5,0.5}是默认值和中心点。您必须使用不同的值(例如{0,0})才能获得偏离旋转。

要在每次单击按钮时增加旋转,您需要使用累积变换。 “Make ...”转换是无上下文的 - 它们不会考虑先前的转换。相反,试试这个:

CGAffineTransform transform; 
transform = CGAffineTransformRotate(image.transform, degrees);
image.transform = transform;

然后,您将degrees旋转添加到当前图像的变换,而不是将变换重置为新值。

答案 3 :(得分:0)

使用:

imageView.transform = CGAffineTransformMakeRotation(0);//Upright
imageView.transform = CGAffineTransformMakeRotation(M_PI/2);//90 degrees clockwise
imageView.transform = CGAffineTransformMakeRotation(-M_PI/2);//90 degrees counter-clockwise

另外,检查你的框架

  • 点击按钮
  • 之前
  • 点击按钮后,在旋转之前
  • 轮换后

你可能会在那里发现异常。