美文网首页
ios触摸事件

ios触摸事件

作者: 721e472431a4 | 来源:发表于2018-06-13 01:10 被阅读20次

                                                        ios触摸事件         

    一、前言

    在App开发过程中,需要利用手势去实现一些功能或者效果。UIKit框架提供了检测常见手势的预定义手势识别器。在手势开发上,最好使用预定义的手势识别器,因为它们的简单性减少了我们的代码量。当然,我们也可以自定义一些特殊的手势,具体的可以查看官方文档。ios中事件可以分为3大类型:触摸事件、加速器事件、远程控制事件,如下图所示:

    二、UIResponder

    在ios中不是任何对象都能处理事件,只要继承了UIResponder的对象才能接收并处理事件。我们称之为"响应者对象",UIApplication,UIController,UIView都继承自UIResponder,因此它们都是响应者对象,都能接收并处理事件。

    UIResponder提供了以下方法来处理事件:

    三、UITouch

    当用户一根手指头触摸到屏幕时,会创建一个与手指相关的UITouch对象,一根手指对应一个UITouch对象。

    UITouch保存着与手指相关的信息, 比如触摸的位置,时间,阶段:

    (1)当手指移动的时候,系统会更新同一个UITouch对象,使之能一直保存该手指在的触摸位置。

    (2)当手指离开屏幕的时候,系统会销毁相应的UITouch对象。

    UITouch的属性:

    其中,UITouchPhase是一个枚举类型、包括:

    UITouch的方法:

    四:UIEvent

    每产生一个事件,就会产生一个UIEvent对象,记录事件产生的时刻和类型

    UIEvent属性:

    五:事件的产生和传递

    发生触摸事件后,系统会将事件加入到一个由UIApplication管理的事件队列中,UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理。通常,先发送事件给程序的主窗口(keywindow),主窗口会在视图层级中找到一个最合适的视图来处理触摸事件,也就是说keywindow最先收到触摸事件。找到合适的视图后,就会调用视图控件的touches方法来做具体的事件处理:

    touchesBegan…

    touchesMoved…

    touchedEnded…

    这些touches方法的默认做法是将事件顺着响应者链条向上传递,将事件传给上一个响应者进行处理。示例如下:

    触摸事件的传递是从父控件传递到子控件的:

    (1)点击了绿色的view

    UIApplication-->UIWindow-->白色-->绿色

    (2)点击了蓝色的view

    UIApplication-->UIWindow-->白色-->橙色-->蓝色

    (3)点击了黄色的view

    UIApplication-->UIWidow-->白色-->橙色-->蓝色-->黄色

    注意:如果父视图不能接收触摸事件,那么子视图就不可能接收触摸事件

    UIView不接收触摸事件的三种情况:

    (1)不接收用户交互

    userInteractionEnabled = NO

    (2)隐藏

    hidden = YES

    (3)透明

    alpha = 0.0~0.01

    六:响应者链条

    响应者链条示意图:

    (1)如果view的控制器存在,就传递给控制器;如果控制器的view不存在,则将其传递给它的父视图。

    (2)在视图层次结构的最顶级视图,如果不能处理接收的事件,那么会将事件传递给Window处理。

    (3)如果window也不处理事件,就将事件传递给UIApplication处理。

    (4)如果UIApplication也不处理该事件,则丢弃该事件。

    注:更多细节处理可参考文章触摸事件详解

    相关文章

      网友评论

          本文标题:ios触摸事件

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