UITapGestureRecognizer *tap= [[UITapGestureRecognizeralloc] init];
// 连续敲击2次
tap.numberOfTapsRequired = 2;
// 需要2根手指一起敲击
tap.numberOfTouchesRequired = 2;
[self.iconViewaddGestureRecognizer:tap];
[tap addTarget:selfaction:@selector(tapIconView:)];
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
//没有触摸事件发生,所有手势识别的默认状态
UIGestureRecognizerStatePossible
//一个手势已经开始但尚未改变或者完成时
UIGestureRecognizerStateBegan,
// 手势状态改变
UIGestureRecognizerStateChanged,
// 手势完成
UIGestureRecognizerStateEnded,
// 手势取消,恢复至Possible状态
UIGestureRecognizerStateCancelled,
//手势失败,恢复至Possible状态
UIGestureRecognizerStateFailed,
// 识别到手势识别
UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded
};
- (void)viewDidLoad {
[super viewDidLoad];
// 1、创建一个敲击手势
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] init];
// 2、设置手势对象的属性
// 点击次数
tapGesture.numberOfTapsRequired = 1;
// 手指的数量
// tapGesture.numberOfTouchesRequired = 2;
// 设置代理
tapGesture.delegate = self;
// 3、把手势添加到view上
[self.view addGestureRecognizer:tapGesture];
// 4、设置手势的监听方法
[tapGesture addTarget:self action:@selector(tapView:)];
}
- (void)tapView:(UITapGestureRecognizer *)tapGest{
NSLog(@"敲击手势的监听方法");
}
长按手势:
- (void)viewDidLoad {
[super viewDidLoad];
// 1、创建一个 “长按手势” 对象
UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc] init];
// 2、设置属性
// 长按最少持续多长时间
longGesture.minimumPressDuration = 2;
// 长按时,距离 “触摸点” 可移动的距离
longGesture.allowableMovement = 30;
// 3、把手势添加到view上
[self.imageView addGestureRecognizer:longGesture];
// 4、设置手势的监听方法
[longGesture addTarget:self action:@selector(longPressView:)];
}
- (void)longPressView:(UILongPressGestureRecognizer *)longPressGesture{
// 怎么判断长按开始和结束
// 通过手势的状态来判断
if (longPressGesture.state == UIGestureRecognizerStateBegan) {
NSLog(@"长按手势开始");
}else{
NSLog(@"长按手势结束");
}
}
轻扫手势:
- (void)viewDidLoad {
[super viewDidLoad];
// 1、创建一个 “轻扫手势” 对象
UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeView:)];
// 2、设置属性
//UISwipeGestureRecognizerDirectionRight 向右轻扫
//UISwipeGestureRecognizerDirectionLeft 向左轻扫
//UISwipeGestureRecognizerDirectionUp 向上
//UISwipeGestureRecognizerDirectionDown 向下
swipeGesture.direction = UISwipeGestureRecognizerDirectionDown;
// 3、把手势添加到view上
[self.imageView addGestureRecognizer:swipeGesture];
}
- (void)swipeView:(UIGestureRecognizer *)swipeGest{
// 怎么判断 "长按" 开始和结束
NSLog(@"%s 手势状态 %ld",__func__, swipeGest.state);
}
捏合手势:
- (void)viewDidLoad {
[super viewDidLoad];
// 1、创建一个 “捏合手势” 对象
UIPinchGestureRecognizer *pinchGest = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinView:)];
// 2、把手势添加到 view上
[self.imageView addGestureRecognizer:pinchGest];
}
- (void)pinView:(UIPinchGestureRecognizer *)pinGest{
// 缩放的比例是一个 “累加” 的过程
#warning 放大图片后,再次缩放的时候,马上回到原先的大小
// self.imageView.transform = CGAffineTransformMakeScale(pinGest.scale, pinGest.scale);
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinGest.scale, pinGest.scale);
// 让比例还原 ,不累加
// 解决办法
pinGest.scale = 1;
}
旋转手势:
- (void)viewDidLoad {
[super viewDidLoad];
// 1、添加一个 “旋转手势” 对像
UIRotationGestureRecognizer *rotationGest = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationView:)];
// 2、把手势添加到 view上
[self.imageView addGestureRecognizer:rotationGest];
}
- (void)rotationView:(UIRotationGestureRecognizer *)rotationGesture{
// 旋转角度
// 旋转角度也是一个累加过程
// 设置图片的旋转
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotationGesture.rotation);
// 清除 “旋转角度” 的累加
rotationGesture.rotation = 0;
}
- (void)viewDidLoad {
[super viewDidLoad];
// 默认情况下,控件只能监听到一种手势
// 如果要监听到多个手势,设置一个代理的方法,告知它允许 “多个手势” 并存
// 给图片添加一个 “旋转手势” 对象
// 1、创建一个 “旋转手势” 对象
UIRotationGestureRecognizer *rotationGest = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationView:)];
// 设置代理
rotationGest.delegate = self;
// 2、把手势添加到 view上
[self.view addGestureRecognizer:rotationGest];
// 3、给图片添加 “捏合手势”
UIPinchGestureRecognizer *pinchGest = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
[self.imageView addGestureRecognizer:pinchGest];
}
- (void)rotationView:(UIRotationGestureRecognizer *)rotationGesture{
// 旋转角度
// 旋转角度也是一个累加过程
// 设置图片的旋转
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotationGesture.rotation);
// 清除 “旋转角度” 的累加
rotationGesture.rotation = 0;
}
- (void)pinchView:(UIPinchGestureRecognizer *)pinGest{
// 缩放的比例是一个 “累加” 的过程
#warning 放大图片后,再次缩放的时候,马上回到原先的大小
// self.imageView.transform = CGAffineTransformMakeScale(pinGest.scale, pinGest.scale);
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinGest.scale, pinGest.scale);
// 让比例还原 ,不累加
// 解决办法
pinGest.scale = 1;
}
// simultaneous 同时发生
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
拖拽手势:
- (void)viewDidLoad {
[super viewDidLoad];
// 给图片添加 “拖拽手势”
// 1、创建一个 “拖拽手势” 对象
UIPanGestureRecognizer *panGest = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
// 2、添加到view
[self.imageView addGestureRecognizer:panGest];
}
- (void)panView:(UIPanGestureRecognizer *)panGest{
// panGest.view 触摸的view
// 拖拽的距离 (距离是一个累加的过程)
CGPoint trans = [panGest translationInView:panGest.view];
// 设置图片移动
CGPoint center = self.imageView.center;
center.x += trans.x;
center.y += trans.y;
self.imageView.center = center;
// 清除累加的距离
[panGest setTranslation:CGPointZero inView:panGest.view];
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~