UIGestureRecognizer(手势识别)在iOS 中非常重要,他极大地提高了移动设备的使用便捷性;

在3.2之前是主要使用的是由UIResponder而来的如下4种方式:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

但是由于这种方式需要自己计算做不同的手势分辨,实在麻烦。

在3.2 以后,提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作。

1、拍击——UITapGestureRecognizer

2、向里或向外捏——UIPinchGestureRecognizer

3、摇动或者拖拽——UIPanGestureRecognizer

4、擦碰——UISwipeGestureRecognizer

5、旋转——UIRotationGestureRecognizer 

6、长按——UILongPressGestureRecognizer 

每个手势识别器的用法都差不多,以UITapGestureRecognizer为例:

     //创建手势识别器对象并监听手势的触发
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
//连续敲击次数
tap.numberOfTapsRequired = ;
//需要两根手指一起敲击
tap.numberOfTouchesRequired = ;
//添加手势到指定的view上
[self.view addGestureRecognizer:tap];

敲击实例:

1、UITapGestureRecognizer 拍击

 //创建手势识别器对象并监听手势的触发
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
//连续敲击次数
tap.numberOfTapsRequired = ;
//需要两根手指一起敲击
tap.numberOfTouchesRequired = ;
//添加手势到指定的view上
[self.view addGestureRecognizer:tap]; - (void)tapAction:(UITapGestureRecognizer*)tapGesture{ NSLog(@"我敲击了屏幕"); CGPoint point = [tapGesture locationInView:self.view];
NSLog(@"tapAction:%f,%f",point.x,point.y);
}

输出:

iOS基础篇(十七)——UIGestureRecognizer用法-LMLPHP

2、UIPinchGestureRecognizer  向里或向外捏

     UIPinchGestureRecognizer *Pinch =[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(PinchAction:)];
Pinch.delegate = self;
[imageView addGestureRecognizer:Pinch]; - (void)PinchAction:(UIPinchGestureRecognizer*)pinchGesture{
pinchGesture.view.transform = CGAffineTransformScale(pinchGesture.view.transform, pinchGesture.scale, pinchGesture.scale);
pinchGesture.scale = ;
}

3、UIPanGestureRecognizer  摇动或者拖拽

//先放置一张图片实施拖拽

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"u=3971024035,4095552302&fm=21&gp=0"]];

    [imageView setFrame:(CGRect){50,50,100,100}];

    [self.view addSubview:imageView];

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
pan.delegate = self;
[self.view addGestureRecognizer:pan]; //设置触发拖拽的最少触摸点,默认为1
pan.minimumNumberOfTouches = ;
//设置触发拖拽的最多触摸点
pan.maximumNumberOfTouches = ; - (void)panAction:(UIPanGestureRecognizer *)panGesture{
CGPoint point = [panGesture locationInView:self.view]; NSLog(@"panAction:(%f, %f)",point.x, point.y);
imageView.center = point; if (panGesture.state==UIGestureRecognizerStateBegan) {
NSLog(@"panAction StateBegan:(%f,%f)", point.x, point.y);
} if (panGesture.state==UIGestureRecognizerStateChanged) {
NSLog(@"panAction StateChanged:(%f,%f)", point.x, point.y);
} if (panGesture.state==UIGestureRecognizerStateEnded) {
NSLog(@"panAction StateEnded:(%f,%f)", point.x, point.y);
} }

iOS基础篇(十七)——UIGestureRecognizer用法-LMLPHP

输出:

iOS基础篇(十七)——UIGestureRecognizer用法-LMLPHP

4、UISwipeGestureRecognizer  擦碰

     UISwipeGestureRecognizer *leftSwipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeAction:)];
[self.view addGestureRecognizer:leftSwipeGesture];
leftSwipeGesture.direction = UISwipeGestureRecognizerDirectionLeft; UISwipeGestureRecognizer *rightSwipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeAction:)];
[self.view addGestureRecognizer:rightSwipeGesture];
rightSwipeGesture.direction = UISwipeGestureRecognizerDirectionRight; - (void)SwipeAction:(UISwipeGestureRecognizer*)swipeGesture{
if (swipeGesture.direction==UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"swipeGesture:Left");
}
if (swipeGesture.direction==UISwipeGestureRecognizerDirectionRight) {
NSLog(@"swipeGesture:Right");
}
}

输出:

iOS基础篇(十七)——UIGestureRecognizer用法-LMLPHP

5、UIRotationGestureRecognizer  旋转

 UIRotationGestureRecognizer *rotations = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];
rotations.delegate = self;
rotation = ;
[self.view addGestureRecognizer:rotations]; - (void)rotationAction:(UIRotationGestureRecognizer*)rotationGesture{
imageView.transform = CGAffineTransformMakeRotation(rotation+rotationGesture.rotation); if (rotationGesture.state==UIGestureRecognizerStateEnded) {
rotation += rotationGesture.rotation;
} }

6、UILongPressGestureRecognizer  长按

     UILongPressGestureRecognizer *longp = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longAction:)];
[self.view addGestureRecognizer:longp]; longp.numberOfTouchesRequired = ;
//长按时间为2秒
longp.minimumPressDuration = ;
//允许15秒中运动
longp.allowableMovement = ; - (void)longAction:(UILongPressGestureRecognizer *)longPress{
CGPoint point = [longPress locationInView:self.view];
imageView.center = point; if(longPress.state == UIGestureRecognizerStateBegan){
NSLog(@"longAction StateBegan: (%f, %f)", point.x, point.y);
} if(longPress.state == UIGestureRecognizerStateEnded){
NSLog(@"longAction StateEnded: (%f, %f)", point.x, point.y);
}
}

输出:

iOS基础篇(十七)——UIGestureRecognizer用法-LMLPHP

04-07 12:03