概述
- 捏合手势(UIPinchGestureRecognizer)
- 旋转手势(UIRotationGestureRecognizer)
示例
- 通过展示一张图片,并通过捏合手势实现缩放,通过旋转手势实现旋转。
- 模拟器中按住option+鼠标左键实现两个手指触控屏幕效果。
先看图

示例代码
ViewController.h
#import <UIKit/UIKit.h>
//代理设置
@interface ViewController : UIViewController <UIGestureRecognizerDelegate>
{
//捏合手势
UIPinchGestureRecognizer* _pinchGes;
//旋转手势
UIRotationGestureRecognizer* _rotationGes;
}
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//添加一张图片
UIImage *image = [UIImage imageNamed:@"timg_1.jpg"];
UIImageView *iv = [[UIImageView alloc] initWithImage:image];
iv.frame = CGRectMake(50, 50, 300, 600);
iv.userInteractionEnabled = YES;
[self.view addSubview:iv];
// 初始化捏合手势
//p1:事件对象的处理者
//p2:事件的响应函数
_pinchGes = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchHandle:)];
//捏合手势添加到视图
[iv addGestureRecognizer:_pinchGes];
//初始化旋转手势
_rotationGes = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateHandle:)];
//旋转手势添加到视图
[iv addGestureRecognizer:_rotationGes];
//将本ViewController设置为捏合手势实现代理
_pinchGes.delegate = self;
//将本ViewController设置为旋转手势实现代理
_rotationGes.delegate = self;
}
//是否可以同时响应两个手势
//YES 可以 NO 不可以
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
};
//捏合手势处理函数
-(void) pinchHandle: (UIPinchGestureRecognizer*) pinch{
UIImageView* iv = (UIImageView*) pinch.view;
//对图像视图对象进行矩阵变换计算并赋值(计算机图形学中描述三维空间用的矩阵,具体如何变换就是纯数学的东西了,有兴趣可以去研究一下)
//transform:图形学中变换矩阵
//CGAffineTransformScale通过缩放的方式产生一个新的矩阵
//p1 原来矩阵
//p2 x方向缩放
//p3 y方向缩放
//return 新矩阵
iv.transform = CGAffineTransformScale(iv.transform, pinch.scale, pinch.scale);
//将缩放值恢复为初始值,如果不归位,会累加
pinch.scale = 1;
}
//旋转手势处理函数
-(void) rotateHandle :(UIRotationGestureRecognizer*) rotate{
UIImageView* iv = (UIImageView*) rotate.view;
//对图像视图对象进行矩阵变换计算并赋值
//transform:图形学中变换矩阵
//CGAffineTransformRotate通过旋转的方式产生一个新的矩阵
//p1 原来矩阵
//p2 旋转的数值
//return 新矩阵
iv.transform = CGAffineTransformRotate(iv.transform, rotate.rotation);
//将缩放值恢复为初始值,如果不归位,会累加
rotate.rotation = 0;
}
@end