前言
在iOS中,你可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势.GestureRecognizer将低级别的转换为高级别的执行行为,是你绑定到view的对象,当发生手势,绑定到的view对象会响应,它确定这个动作是否对应一个特定的手势(swipe,pinch,pan,rotation).如果它能识别这个手势,那么就会向绑定它的view发送消息,如下图

UIKit框架提供了一些预定义的GestureRecognizer.包含下列手势
UITapGestureRecognizer敲击手势(单击和双击) UIPanGestureRecognizer(拖动手势) UIPinchGestureRecognizer(缩放手势) UISwipeGestureRecognizer(擦碰手势) UIRotationGestureRecognizer(旋转手势) UILongPressGestureRecognizer(长按手势)如果你想让你的应用程序来识别一个独特的手势,如选择目录或纠结的运动,你可以创建自己的自定义GestureRecognizer,将在下篇介绍
将特定的手势和view相关联
每一个特定的手势必须关联到view对象中才会有作用,一个view对象可以关联多个不同的特定手势,但是每一个特定的手势只能与一个view相关联。当用户触摸了view,这个GestureRecognizer就会接受到消息,它可以响应特定的触摸事件。

与特定view关联
创建GestureRecognizer实例 addGestureRecognizer 实现处理手势的方法可以使用removeGestureRecognizer: 来移除手势。
_panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlerPanGesture:)];
_panGestureRecognizer.delegate = self;
_panGestureRecognizer.maximumNumberOfTouches = 2;
_panGestureRecognizer.minimumNumberOfTouches = 2;
[self.view addGestureRecognizer:_panGestureRecognizer];
- (void)handlerPanGesture:(UIPanGestureRecognizer *)recognizer
{
if ((recognizer.state == UIGestureRecognizerStateBegan) ||
(recognizer.state == UIGestureRecognizerStateChanged))
{
CGPoint offset = [recognizer translationInView:self.view];
CGRect frame = self.rightViewController.view.frame;
frame.origin.x += offset.x;
if (frame.origin.x >= 0 && frame.origin.x <= kScreenWidth)
{
self.rightViewController.view.frame = frame;
}
[recognizer setTranslation:CGPointZero inView:self.view];
}
else if (recognizer.state == UIGestureRecognizerStateEnded)
{
BOOL isVisible = self.rightViewController.view.frame.origin.x < kScreenWidth / 2;
[self showRightView:isVisible];
}
}
手势识别状态










