我有下一个任务:按钮点击图片必须旋转到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];
}
在点击按钮之前我有这个
点击此后
您可以看到图像旋转到90度。但它从开始中心点向下移动。 此外,如果我再次点击按钮没有任何反应。
答案 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
另外,检查你的框架
你可能会在那里发现异常。