1.手势的分类
UITapGestureRecognizer :点击手势(根据设定单击次数可以分为单次点击和多次点击)
UIPinchGestureRecognizer :缩放或捏合手势
UIPanGestureRecognizer :平移或拖拽手势
UISwipeGestureRecognizer :轻扫手势
UIRotationGestureRecognizer :旋转手势
UILongPressGestureRecognizer :长按手势
2.手势的基本使用
(1)以单击手势为例,先初始化手势
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(tapGestureAction:)];
第一个参数是绑定手势触发时通知的对象,第二个参数是手势触发时执行的方法
(2)设置手势的属性
例如在第一步的基础上,将点击手势设置为双击手势
tapGesture.numberOfTapsRequired = 2;
(3)添加手势
[view addGestureRecognizer:tapGesture];
(4)编辑手势触发方法
在tapGestureAction:里编辑你想要的操作
3.几个手势的具体使用
(1)轻扫手势的使用
- (void)showGestureForSwipeRecognizer:(UISwipeGestureRecognizer *)recognizer { |
// 得到点击的位置 |
CGPoint location = [recognizer locationInView:self.view]; |
// 判断手势的方向,根据方向移动位置 |
if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) { |
location.x -= 220.0; |
} else { |
location.x += 220.0; |
} |
// 实现动画 |
[UIView animateWithDuration:0.5 animations:^{ |
self.imageView.alpha = 0.0; |
self.imageView.center = location; |
}]; |
} |
(2)旋转手势的简单使用
- (void)showGestureForRotationRecognizer:(UIRotationGestureRecognizer *)recognizer { |
// 得到点击的位置 |
CGPoint location = [recognizer locationInView:self.view]; |
// 让图片跟着手势一起旋转 |
CGAffineTransform transform = CGAffineTransformMakeRotation([recognizer rotation]); |
self.imageView.transform = transform; |
// 实现取消手势的动画 |
if (([recognizer state] == UIGestureRecognizerStateEnded) || ([recognizer state] == UIGestureRecognizerStateCancelled)) { |
[UIView animateWithDuration:0.5 animations:^{ |
self.imageView.alpha = 0.0; |
self.imageView.transform = CGAffineTransformIdentity; |
}]; |
} } |
4.手势冲突问题
(1)如果想要轻扫手势的识别优先于拖拽手势,可以使用下面这句话,这句话的意思是只有在识别轻扫手势失败时才会识别拖拽手势,如果识别轻扫手势成功就不会继续 识· 别托转手势
[self.panRecognizer requireGestureRecognizerToFail:self.swipeRecognizer];
(2)如何禁止某个视图识别一个手势
- (void)viewDidLoad { |
[super viewDidLoad]; |
// 首先设置手势的代理对象 |
self.tapGestureRecognizer.delegate = self; |
} |
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// 判断是否点击在某个视图或者姿势图上 |
if ([touch view] == self.customSubview){ |
// 如果不想让这个视图成功识别这个手势和以返回NO |
return NO; |
} |
return YES; |
} |