iOS开发之手势gesture详解

2020-01-18 18:05:26于海丽

前言  

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

UIKit框架提供了一些预定义的GestureRecognizer.包含下列手势

 UITapGestureRecognizer敲击手势(单击和双击)  UIPanGestureRecognizer(拖动手势)  UIPinchGestureRecognizer(缩放手势)  UISwipeGestureRecognizer(擦碰手势)  UIRotationGestureRecognizer(旋转手势)  UILongPressGestureRecognizer(长按手势)

如果你想让你的应用程序来识别一个独特的手势,如选择目录或纠结的运动,你可以创建自己的自定义GestureRecognizer,将在下篇介绍

将特定的手势和view相关联

每一个特定的手势必须关联到view对象中才会有作用,一个view对象可以关联多个不同的特定手势,但是每一个特定的手势只能与一个view相关联。当用户触摸了view,这个GestureRecognizer就会接受到消息,它可以响应特定的触摸事件。ios,gesture,手势ios,gesture,手势

与特定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];
 }
}

手势识别状态ios,gesture,手势