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