1.事件是怎么样产生与传递的?

当发生一个触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中.(队列是先进先出,而栈是先进后出)

UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理.首先交给主窗口keywindow去处理

主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,当找到最合适的view来处理事件时,该view会调用touchBegan等方法来对事件进行处理

2:时间传递的先后顺序以及注意点:

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

如果一个父控件不能接收事件,那么它里面的了子控件也不能够接收事件.

3:一个控件什么情况下不能够接收事件:

1.不接收用户交互时不能够处理事件:如果父控件不能与用户交互,那么子控件也不会接收到触摸事件,那么触摸事件最后就会传递给父控件的父控件去处理

userInteractionEnabled = NO

2.当一个控件隐藏的时候不能够接收事件:当一个父控件隐藏后,其上的子控件也就会被隐藏,也就是父控件不能接受触摸事件的时候,其上的子控件也不能接受触摸事件

Hidden = YES的时候

3.当一个控件为透明白时候也不能够接收事件:当一个父控件透明的时候,子控件也会是透明的,当透明度在0.0 - 0.01之间的时候,该控件不能去接受触摸事件(透明度为0的时候,就是完全透明,0.0 - 0.01包含0.0和0.01这两个值)

注意:UIImageView的userInteractionEnabled默认就是NO,

因此UIImageView以及它的子控件默认是不能接收触摸事件的

4:UIEvent:每产生一个事件就会产生产生一个UIEvent对象。UITouch为触摸对象,一根手指触摸就会产生一个UITouch对象,两根手指触摸就会产生两个UITouch对象。UIEvent还提供了相应的方法获得在某个view上的触摸对象UITouch

5:事件的传递示例如图所示:

1:事件的传递顺序

2: 如图所示新建四个不同颜色的view,分别在四个view中实现touchbegan方法,1:四个view中有相同的代码,则抽成父类直接在父类中实现touchbegan方法,让子类去继承,如何在父类中区分不同的子类,可以通过在父类中查看self.class来查看子类所属的class,或是父类暴露type接口,子类去重写父类的方法,则在父类中父类就可以根据赋值的type类型来判断不同的子类,让不同的子类在父类的方法中实现不同的方法。子类继承父类后,就拥有了父类所有的代码,若是想子类和父类发生关联进行数据传递,则父类可以暴露方法供子类去重写,1:子类可以重写父类的方法获得不同于父类的内容   2:父类暴露接口设置返回值,子类重写后,则父类就可以拿到子类重写的方法中的返回值(get方法接口)2:若是先创建了xib文件,想把xib中的某个控件封装起来,则可以自定义xib中的类,继承系统的类,然后来到xib中,对要封装的控件进行类的关联:如图:

1:1:当设置黄色view的userInteractionEnabled = NO,点击黄色的view后,事件是由父控件传递到子控件,若父控件不能接受事件,则子控件也不能去接受事件(3个条件会使控件不能接受点击事件),事件由橙色--蓝色,此时的view不能与用户交互,所以事件不能传递到黄色的view处,只能传递到蓝色的view,蓝色view能处理事件,则会调用其touchBegan方法 2:当设置蓝色view的userInteractionEnabled = NO,点击黄色的view,事件只会传递到橙色的view处,蓝色不能接受触摸事件,所以事件不会传到蓝色view处,也就不会传到黄色的view处。所以事件由橙色view去处理

2:1:如下图:UIImageView默认userInteractionEnabled = NO,UIImageView和其上的子控件都不能接受到触摸事件,默认在xib中是不能再UIImageView上添加子控件的,可以通过代码添加 2:还有一种就是透明度的设置,在0.0-0.01之间的透明度,父控件透明子控件也会透明,父控件隐藏,则子控件也会隐藏,则其父控件和子控件都不会接受到触摸事件

ios开发事件处理之 :二:事件的产生与传递的更多相关文章

  1. iOS开发-定制多样式二维码

    iOS开发-定制多样式二维码   二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常 ...

  2. IOS开发-文件管理(二)

    IOS开发-文件管理(二) 五.Plist文件 String方式添加               NSString *path = [NSHomeDirectory( )  stringByAppen ...

  3. iOS开发中视图控制器ViewControllers之间的数据传递

    iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storybo ...

  4. IOS开发使用委托delegate在不同窗口之间传递数据

    IOS开发使用委托delegate在不同窗口之间传递数据是本文要介绍的内容,主要是来讲解如何使用委托delegate在不同窗口之间传递数据,具体内容来看详细内容.在IOS开发里两个UIView窗口之间 ...

  5. iOS开发系列之触摸事件

    基础知识 三类事件中触摸事件在iOS中是最常用的事件,这里我们首先介绍触摸事件. 在下面的例子中定义一个KCImage,它继承于UIView,在KCImage中指定一个图片作为背景.定义一个视图控制器 ...

  6. 【Swift】iOS开发历险记(二)

    前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯 ...

  7. 【Swift】iOS开发笔记(二)

    前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯 ...

  8. ios开发事件处理之:三 :寻找最合适的view

    1:事件的产生与传递: 2:寻找最合适的view:如何查找最合适的view:需要三步:1:先判断自身是否能接受触摸事件 2:判断触摸点是否在自己身上 3:若前两条都满足,则其会从后往前遍历所有子控件( ...

  9. ios开发事件处理之:五:事件的响应

随机推荐

  1. 原生JavaScript 封装ajax

    原生JavaScript 封装ajax   function myajax(options){ //新建一个局部对象 用来存放用户输入的各种参数 var opt={ type:options.type ...

  2. 【Codeforces Round #452 (Div. 2) A】 Splitting in Teams

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 贪心 1优先和2组队. 如果1没有了 就结束. 如果1还有多余的. 那么就自己3个3个组队 [代码] #include <bi ...

  3. 【Oracle错误集锦】:PLSQL无法直连64位Oracle11g数据库

    背景:Oracle数据库装在本机上,使用PLSQL连接. 今天安装完Oracle 11g数据库后.用plsql连接数据库死活都连接不上.而且plsql客户端登录窗体的Database下拉框还为空.见下 ...

  4. node中间层

    node中间层 一.总结 1.node中间层作用:前端也是mvc,NodeJS之后,前端可以更加专注于视图层,而让更多的数据逻辑放在Node层处理 2.node中间层作用:当发现所有请求量太多应付不过 ...

  5. php网站修改为https后curl报错301

    今日测试项目时需调用post模拟传参测试接口是否可用,但返回报错信息(301永久迁移),在网上搜寻解决办法无果,最后发现只要将跳转地址修改为https://+url的形式就可以了

  6. 硬件——nrf51822第一篇,GPIO的使用

    未完,待续...... 本实现是基于一个开发箱,包括:综合应用开发系统主板XT-EDU-AK   1套: 手持终端系统 XT-EDU-HK 1套: GPIO操作 工程: 这是一个关于流水灯的程序: 我 ...

  7. [React] Style a React component with styled-components

    In this lesson, we remove the mapping between a React component and the styles applied to it via cla ...

  8. jqgrid 实现行编辑,表单编辑的列联动

    这个问题的场景相信大家都遇到过,比方有A,B,C三列,B,C列均为下拉框.可是C列的值是由B列的值来决定的.即C列中的值是动态变化的,变化的根据就是B列中你选择的值. 本文给出的是一个有用,简易快捷的 ...

  9. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  10. 6.5 Android硬件访问服务使用反射

    1.前面的例子中App为了能够范问ILedService接口,把classes.jar导入到应用程序中,但是我们不想把classes编进apk包里面去,这样导致我们的apk程序会很大(解压缩apk会发 ...