且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[IOS]图片的旋转和缩放

更新时间:2022-08-18 17:00:54

实现图片的旋转和缩放也是IOS开发中一个比较常见的技术点,下面我们来一起学习,这功能如何实现?

效果图:

[IOS]图片的旋转和缩放  [IOS]图片的旋转和缩放
运行的时候按住alt键能够实现图片的伸缩

ViewController.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIGestureRecognizerDelegate>
{
    float scale;
    float prviousScale;  //放大倍数
    float rotation;
    float previousRotation; //旋转角度
}
@property (retain, nonatomic) IBOutlet UIImageView *otherImage;

@end

ViewController.m:

#import "ViewController.h"
#import "MyGestureRecongnizer.h"  //自定义手势
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    prviousScale=1;
	
    //缩放手势
    UIPinchGestureRecognizer *pin=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(doPinch:)];
    pin.delegate=self;
    [self.otherImage addGestureRecognizer:pin];
    
    //旋转事件
    UIRotationGestureRecognizer *rotaion=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(doRotate:)];
    rotaion.delegate =self;
    [self.otherImage addGestureRecognizer:rotaion];
    
    
    //添加自定义手势(点击到X大于200的地方相应)
    MyGestureRecongnizer *my = [[MyGestureRecongnizer alloc] initWithTarget:self action:@selector(fun:)];
    [self.view addGestureRecognizer:my];
    
    
}
//自定义手势触发事件
-(void)fun:(MyGestureRecongnizer *)my
{
    NSLog(@"OK");
}

//允许同时调用两个手势,如果是no的话就只能调用一个手势
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

-(void)transfromImageView
{
    CGAffineTransform t=CGAffineTransformMakeScale(scale*prviousScale, scale*prviousScale);
    t=CGAffineTransformRotate(t, rotation+previousRotation);
    self.otherImage.transform=t;
}

//缩放方法
-(void)doPinch:(UIPinchGestureRecognizer *)gesture
{
    scale=gesture.scale; //缩放倍数
    [self transfromImageView];
    if (gesture.state==UIGestureRecognizerStateEnded) {
        prviousScale=scale*prviousScale;
        scale=1;
    }
}

//旋转方法
-(void)doRotate:(UIRotationGestureRecognizer *)gesture
{
    rotation=gesture.rotation; //旋转角度
    [self transfromImageView];
    if (gesture.state==UIGestureRecognizerStateEnded) {
        previousRotation=rotation+previousRotation;
        rotation=0;
    }
}


- (void)dealloc {
    [_otherImage release];
    [super dealloc];
}
@end