ios开发事件处理之 :二:事件的产生与传递
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开发事件处理之 :二:事件的产生与传递的更多相关文章
- iOS开发-定制多样式二维码
iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常 ...
- IOS开发-文件管理(二)
IOS开发-文件管理(二) 五.Plist文件 String方式添加 NSString *path = [NSHomeDirectory( ) stringByAppen ...
- iOS开发中视图控制器ViewControllers之间的数据传递
iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storybo ...
- IOS开发使用委托delegate在不同窗口之间传递数据
IOS开发使用委托delegate在不同窗口之间传递数据是本文要介绍的内容,主要是来讲解如何使用委托delegate在不同窗口之间传递数据,具体内容来看详细内容.在IOS开发里两个UIView窗口之间 ...
- iOS开发系列之触摸事件
基础知识 三类事件中触摸事件在iOS中是最常用的事件,这里我们首先介绍触摸事件. 在下面的例子中定义一个KCImage,它继承于UIView,在KCImage中指定一个图片作为背景.定义一个视图控制器 ...
- 【Swift】iOS开发历险记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- 【Swift】iOS开发笔记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- ios开发事件处理之:三 :寻找最合适的view
1:事件的产生与传递: 2:寻找最合适的view:如何查找最合适的view:需要三步:1:先判断自身是否能接受触摸事件 2:判断触摸点是否在自己身上 3:若前两条都满足,则其会从后往前遍历所有子控件( ...
- ios开发事件处理之:五:事件的响应
随机推荐
- python处理文件
打开文件: open是内建函数,一个方法 open("test.txt","r",buffering=1) test.txt 表示被打开的文件名,如果不 ...
- 六、Docker+Gitlab
原文:六.Docker+Gitlab (1)下载镜像: docker pull gitlab/gitlab-ce (2)运行镜像: GITLAB_HOME=`pwd`/data/gitlab dock ...
- Maven学习总结(14)——Maven 多模块项目如何分工?
一.开场白 使用Maven有段时间了,只能感慨真是个好东西,让我从传统模式体会到了严谨.规范.敏捷.方便的特性. 如果你懂Maven或许看过Juven翻译的<Maven权威指南>: 发个牢 ...
- 洛谷 P1334 瑞瑞的木板
P1334 瑞瑞的木板 题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏.他测量栅栏并发现他需要N(1≤N≤20,000)根木板,每根的长度为整数Li(1≤Li≤50,000).于是,他神奇地买了 ...
- android adb常见问题的解决方法!
** adb的常见问题 adb:android debug bridge,用于连接模拟器/手机与PC端软件(比如:eclipse或者xx手机助手) adb devices -> ...
- css 0.5px
1. 利用css3新属性scale(好用推荐) 其实现的关键就是利用before或after伪元素,宽高同时设为200%,然后再缩放0.5,自然就是0.5px了 代码如下: div { positon ...
- iOS开发之CocoaPods(objective-c第三方库管理工具)
介绍: iOS开发中,大多数情况下,我们都须要集成一些第三方依赖库.对于一个稍大的项目,用到的第三方依赖库的数量也很可观.CocoaPods是objective-c第三方库管理工具,方便第三方库的管理 ...
- css中hack是什么
css中hack是什么 一.总结 1.CSS hack:由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览 ...
- html 代码
1.结构性定义 文件类型 <HTML></HTML> (放在档案的开头与结尾) 文件主题 <TITLE></TITLE> (必须放在「文头」区块内) 文 ...
- AJAX有关的请求协议及HTTP报文
URI:统一资源标识符 URI=URL+URNURL:统一资源定位符URN:统一资源名称 上边的图片编号对应下边的编号说明: 1.HTTP(占90%市场)/HTTPS/FTP 传输协议(可以理解为快递 ...