为了完成手势识别,必须借助于手势识别器
----
UIGestureRecognizer
利用
UIGestureRecognizer,能轻松识别用户在某个view上面做的一些常见手势
UIGestureRecognizer
是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势
UITapGestureRecognizer
(
敲击
)
UIPinchGestureRecognizer
(
捏合,用于缩放
)
UIPanGestureRecognizer
(
拖拽
)
UISwipeGestureRecognizer
(
轻扫
)
UIRotationGestureRecognizer
(
旋转
)
UILongPressGestureRecognizer
(
长按
)
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 给imageView添加手势
self.imageView.userInteractionEnabled = YES;
// 创建『敲击』手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
// 双击触发
// tap.numberOfTapsRequired = 2;
[self.imageView addGestureRecognizer:tap];
}
- (void)tap:(UITapGestureRecognizer *)recognizer
{
NSLog(@"敲击了");
}
@end
一些代理方法:
//
// ViewController.m
#import "ViewController.h"
@interface ViewController ()<UIGestureRecognizerDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 给imageView添加手势
self.imageView.userInteractionEnabled = YES;
// 创建『敲击』手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
// 双击触发
// tap.numberOfTapsRequired = 2;
tap.delegate = self; // 设置代理为当前控制器
[self.imageView addGestureRecognizer:tap];
}
- (void)tap:(UITapGestureRecognizer *)recognizer
{
NSLog(@"敲击了");
}
#pragma mark - <UIGestureRecognizerDelegate>
/**
* 是否允许开始触发手势
*
* @param gestureRecognizer 手势识别器
*
* @return 返回YES可以触发,返回NO不能触发
*/
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
NSLog(@"先来到这里");
return YES;
}
/**
* 是否允许同事支持多个手势(默认不支持多个手势)
*/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return NO;
}
/**
* 是否允许接收手指的触摸点(通过这方法可以控制一个控件左边能点击,右边不能点击)
*/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
CGPoint currentPoint = [touch locationInView:self.imageView];
if (currentPoint.x < self.imageView.bounds.size.width * 0.5) {
return YES;
}else{
return NO;
}
}
@end