实现图片的旋转和缩放也是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