IOS手势检测

来源:互联网 发布:淘宝的耐克鞋是正品吗 编辑:程序博客网 时间:2024/06/06 02:48

1.响应者链

当用户点击屏幕时,会产生一个响应事件。这个事件一般由当前的第一响应者First responder(即当前用户交互的控件,一般为UIView或者其继承类)进行监听处理。如果该控件不处理点击事件,那事件就会被传播到他对应的视图控制器,如果视图控制器也不做处理,就会被传播给控件的父视图。

响应链的传播如下:

First Responder -> First Responder的ViewController -> 父视图 -> 父视图的ViewController -> UIWindow -> UIApplication -> UIApplication Delegate -> 丢弃

在某个控件截获事件时,也可以通过代码进行手动的传递(详情可以自行在开发文档搜索):

self.nextResponder //返回nil或者下一个响应object

2.响应事件

当用户触碰屏幕时,会分别响应控件的以下4个方法。我们可以利用这个四个方法来自定义捕捉用户的手势行为,利用touches获得点击位置,event获得事件类型

//当用户手指开始触碰窗口时响应该方法-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{    NSLog(@"touch!");}/*//当用户手指在控件上移动时触发-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;//当用户手指结束触碰时触发-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;//当系统事件终止了触碰事件时触发-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;*/

3. 使用IOS自带的手势处理器

对于一些常见的手势如点击,捏合,横扫等,苹果提供了自带的API可以直接检测这些手势并响应。

//点击UITapGestureRecognizer;//捏合UIPinchGestureRecognizer;//旋转UIRotationGestureRecognizer;//扫UISwipeGestureRecognizer;//拖动UIPanGestureRecognizer;//还有其他
这些处理器都是继承了UIGestureRecognizer的子类。

手势处理器的使用一般分为三个步骤:创建,设置,添加。下面以UISwipeGestureRecognizer为例:


//设置视图支持用户交互    self.view.userInteractionEnabled = true;    //设置视图支持多点触碰    self.view.multipleTouchEnabled = true;    //创建上下左右四个方向手势处理器    for(int i=0; i<4; i++){        //创建处理轻扫手势的手势处理器        UISwipeGestureRecognizer* gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipe:)];        //设置处理器只处理一个手指的触碰        gesture.numberOfTouchesRequired = 1;        //指定轻扫方向        gesture.direction = 1<<i;        //添加该控制器        [self.view addGestureRecognizer:gesture];    }//手势触发方法- (void)handleSwipe:(UISwipeGestureRecognizer*)gesture {    //获取轻扫手势    NSUInteger direction = gesture.direction;    //输出方向    switch (direction) {        case UISwipeGestureRecognizerDirectionLeft:            NSLog(@"Left");            break;        case UISwipeGestureRecognizerDirectionRight:            NSLog(@"Right");            break;        case UISwipeGestureRecognizerDirectionUp:            NSLog(@"Up");            break;        case UISwipeGestureRecognizerDirectionDown:            NSLog(@"Down");            break;        default:            break;    }    }

4. 自定义手势处理器

可以创建一个新类来继承UIGestureRecognizer,并重写4个touches的响应事件,在适当的时候设置类对象的属性state为UIGestureRecognizerStateCancelled或者UIGestureRecognizerStateEnded(将会触发处理手势的方法)来表示自定义手势的识别的成功与否即可。


附上一个用上下左右轻扫手势控制移动的简易贪吃蛇:

Snake


原创粉丝点击