美文网首页
IOS中添加事件响应

IOS中添加事件响应

作者: 飞飞超人 | 来源:发表于2019-01-17 11:50 被阅读5次

在IOS中添加事件响应主要有两种种方式,UIGestureRecognizer和UIControl。

当两种种响应事件同时存在的时候,UIControl的响应优先级高于UIGestureRecognizer。

这儿先讲一下事件响应原理:UIVIew继承自UIResponser,最终触摸事件是在TouchXX函数中实现,但是在这之前需要通过UIView中定义的HitTest函数来递归找到我们的HitTestView,HitTestView就是响应事件的那个View,关于寻找HitTestView只需要记住一句话:寻找hitTestView的顺序是从application的最上层开始,一直到最下面的子view(相当于树的叶子结点),即每找到一个view就将其添加到事件响应链,并且调用pointinside函数继续在他的子view中寻找,直到没有子view或者子view不包括点击区域;响应触摸事件是相反的方向,后者也称为响应链的方向(响应触摸事件在代码中表现为Touchxx函数的调用,如果需要同时响应需要在touchxx中继续调用他的super方法),如果最后找到的view能够响应事件那么它就是我们要找的hitTestView,如果不能就继续沿响应链向上,直到找到hitTestView,如果一直到application都没有,系统就抛弃该事件。

添加UIControl事件

UIControl应该是开发过程中使用最多的类了,各种控件都继承于它。通常有通过xib和手写代码添加两种方式,xib具体操作方法这儿不做介绍,请参阅其他文章。代码添加方式如下:

[self.backgroundBtn addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];

这儿想特别说明一下在UIControl中定义的beginTrackingWithTouch这几个函数中,其实做的事是定义了一些在触摸阶段的一些额外自定义效果事件,比如Button中会定义一些高光之类的效果。

添加UIGestureRecognizer事件

可以为任意的UIView通过的addGestureRecognizer方法添加一个或者多个手势(addGestureRecognizeer是在UIView的扩展(UIViewGestureRecognizer)中定义)。当添加多个手势的时候,可以在UIGestureRecognizer的delegate中定义是否同时响应UIGestureRecognizer的多种手势,这儿的同时响应是指UIGestureRecognizer内部的,不包括和UIControl类型的事件的同时响应,比如同时响应UIGestureRecognizer定义的touchGesture和panGesture。

    UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(OnCancleFilter:)];
    [_titleImageView addGestureRecognizer:gesture];
    
    -(void)OnCancleFilter:(id)sender
    {
        //to do
    }

有时候会遇到一些比较复杂的事件响应情况,如一个竖向scrollview的cell里又需要响应横向scrollview,这样cell中的滑动事件容易被外层的scrollview给消耗掉,这时候就需要对外层scrollview有一些特殊的设置来实现需要的功能,比如外面的scrollview延时响应。实践过程中会遇到不少类似问题,还是很需要耐心慢慢解决,坑总是一个一个躺过来的。

相关文章

  • IOS中添加事件响应

    在IOS中添加事件响应主要有两种种方式,UIGestureRecognizer和UIControl。 当两种种响应...

  • 关于重写hitTest,拦截runLoop响应

    iOS设备的响应机制是,触发事件后,事件添加runLoop队列中,事件处理时,一层一层往下找对应触发事件的View...

  • 响应链

    iOS事件响应链中Hit-Test View的应用从iOS的事件响应链看TableView为什么不响应touche...

  • iOS textfield设置键盘的 return 事件

    1:添加代理 < UITextFieldDelegate >2:return键的设置 3:响应事件函数 iOS让...

  • iOS事件的响应者链

    iOS 事件响应者链 1 iOS中的事件 触摸事件 加速计事件 远程控制事件 在iOS中不是任何对象都能处理事件,...

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

  • 响应者链浅谈

    响应者对象 响应者对象(Response object) 响应者对象就是可以响应事件并对事件作出处理。iOS中UI...

  • 事件传递和响应者链

    响应者:在iOS中,响应者为能响应事件的UIResponder子类对象,如UIButton、UIView等。 响应...

  • iOS基础知识整理之事件传递响应链

    事件传递响应链 UIResponder 在iOS中,能够响应事件的对象都是UIResponder的子类对象。UIR...

  • iOS中的触摸事件

    iOS中的事件 在用户使用app过程中,会产生各种各样的事件iOS中的事件可以分为3大类型 响应者对象 在iOS中...

网友评论

      本文标题:IOS中添加事件响应

      本文链接:https://www.haomeiwen.com/subject/kstidqtx.html