Ios5 UIImageView在iPhone Sdk中旋转和缩放

Ios5 UIImageView在iPhone Sdk中旋转和缩放,ios5,uiimageview,quartz-2d,image-rotation,zooming,Ios5,Uiimageview,Quartz 2d,Image Rotation,Zooming,我在项目中使用UIImageview实现缩放和旋转, 旋转图像后,我在放大和缩小时遇到问题 以下是我的代码: 在.h文件中 @interface ViewController : UIViewController{ float degrees; float height; float width; float moveLeft; float moveRight; } @property(nonatomic,retain)UIImageView *imageView; -(IBActi

我在项目中使用UIImageview实现缩放和旋转, 旋转图像后,我在放大和缩小时遇到问题

以下是我的代码:

在.h文件中

@interface ViewController : UIViewController{
 float degrees;
 float height;
 float width;

float moveLeft;
float moveRight;
}

@property(nonatomic,retain)UIImageView *imageView;

-(IBAction)rotationLeft:(id)sender;
-(IBAction)rotationRight:(id)sender;
-(IBAction)zoomIn:(id)sender;
-(IBAction)zoomOut:(id)sender;

-(IBAction)moveLeft:(id)sender;
-(IBAction)moveRight:(id)sender; 
在.m文件中

- (void)viewDidLoad
{
[super viewDidLoad];



height=50;
width=50;
degrees=20;
moveLeft=20;
moveRight=20;
imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1.png"]];
imageView.frame=CGRectMake(100, 100,width, height);
[self.view addSubview:imageView];



// Do any additional setup after loading the view, typically from a nib.
}
-(IBAction)rotationLeft:(id)sender{
//the value in degrees
imageView.transform = CGAffineTransformMakeRotation(degrees*M_PI/180);
degrees=degrees+25;
}

-(IBAction)rotationRight:(id)sender{
//the value in degrees
degrees=degrees-25;
imageView.transform = CGAffineTransformMakeRotation(degrees*M_PI/180);

}
-(IBAction)zoomIn:(id)sender{
height=height-15;
width=width-15;
imageView.frame=CGRectMake(100, 100,width, height);
}
-(IBAction)zoomOut:(id)sender{
height=height+15;
width=width+15;
imageView.frame=CGRectMake(100, 100,width, height);
}

请查找附加的图像以供参考。

您应该使用
CGAffineTransformMakeScale
进行缩放,而不是强制使用帧

在某处定义一个全局
foal x=1然后:

-(IBAction)zoomIn:(id)sender{
   x += 0.3;
   imageView.transform = CGAffineTransformMakeScale(x, x);
}

-(IBAction)zoomOut:(id)sender{
   x -= 0.3;
   imageView.transform = CGAffineTransformMakeScale(x, x);
}

您应该使用
CGAffineTransformMakeScale
进行缩放,而不是强制帧

在某处定义一个全局
foal x=1然后:

-(IBAction)zoomIn:(id)sender{
   x += 0.3;
   imageView.transform = CGAffineTransformMakeScale(x, x);
}

-(IBAction)zoomOut:(id)sender{
   x -= 0.3;
   imageView.transform = CGAffineTransformMakeScale(x, x);
}

我建议使用与旋转代码非常相似的方法缩放图像:

CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);

只需发送大于1.0的数据进行放大,发送小于1.0的数据进行缩小

我建议使用与旋转代码非常相似的方法缩放图像:

CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);

只需发送大于1.0的数据进行放大,发送小于1.0的数据进行缩小

下面的代码非常适合我

-(IBAction)rotationLeft:(id)sender{
//the value in degrees
    degrees=degrees+25;
    CGAffineTransform t;
    t=CGAffineTransformMakeScale(x, x);
    // imageView.transform = CGAffineTransformMakeRotation(degrees*M_PI/180,x,x);
    imageView.transform=CGAffineTransformRotate(t, degrees*M_PI/180);
}

-(IBAction)rotationRight:(id)sender{
    degrees=degrees-25;
    CGAffineTransform t;
    t=CGAffineTransformMakeScale(x, x);
    imageView.transform=CGAffineTransformRotate(t, degrees*M_PI/180);

 }
 -(IBAction)zoomIn:(id)sender{
    x += 0.3;
    CGAffineTransform t;
    t=CGAffineTransformMakeRotation(degrees*M_PI/180);
    imageView.transform=CGAffineTransformScale(t, x, x);
 }

 -(IBAction)zoomOut:(id)sender{
     x -= 0.3;
    CGAffineTransform t;
    t=CGAffineTransformMakeRotation(degrees*M_PI/180);
    imageView.transform=CGAffineTransformScale(t, x, x);
 }

下面的代码为我工作完美

-(IBAction)rotationLeft:(id)sender{
//the value in degrees
    degrees=degrees+25;
    CGAffineTransform t;
    t=CGAffineTransformMakeScale(x, x);
    // imageView.transform = CGAffineTransformMakeRotation(degrees*M_PI/180,x,x);
    imageView.transform=CGAffineTransformRotate(t, degrees*M_PI/180);
}

-(IBAction)rotationRight:(id)sender{
    degrees=degrees-25;
    CGAffineTransform t;
    t=CGAffineTransformMakeScale(x, x);
    imageView.transform=CGAffineTransformRotate(t, degrees*M_PI/180);

 }
 -(IBAction)zoomIn:(id)sender{
    x += 0.3;
    CGAffineTransform t;
    t=CGAffineTransformMakeRotation(degrees*M_PI/180);
    imageView.transform=CGAffineTransformScale(t, x, x);
 }

 -(IBAction)zoomOut:(id)sender{
     x -= 0.3;
    CGAffineTransform t;
    t=CGAffineTransformMakeRotation(degrees*M_PI/180);
    imageView.transform=CGAffineTransformScale(t, x, x);
 }

它的缩放但图像像给定的参考图像一样拉伸。它的缩放但图像像给定的参考图像一样拉伸。并使用该“0.3”值播放一点,以获得所需的缩放因子。Teodor,它应该在旋转图像的同时进行缩放。。。下面是一个场景。。。如果我点击zoomin和zoomout方法,它的工作状态很好。。。当我调用旋转函数一段时间后,图像位置将恢复正常,而不是旋转位置。也许你在某个地方重置了“度”值。确保它没有被重置,并且确保它始终保持在零和360之间(比如如果度大于360,则度=零,反之亦然,如果度小于零,则度=360),并使用该“0.3”值播放一点以获得所需的缩放因子。Teodor,在旋转图像的同时也应进行缩放。。。下面是一个场景。。。如果我点击zoomin和zoomout方法,它的工作状态很好。。。当我调用旋转函数一段时间后,图像位置将恢复正常,而不是旋转位置。也许你在某个地方重置了“度”值。确保未重置,并且确保始终将其保持在零和360之间(例如,如果度数大于360,则度数=零,反之亦然,如果度数小于零,则度数=360)