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开发事件处理之:五:事件的响应
随机推荐
- 比较s+=4;和s=s+4;的不同
1.s=s+4: public class Test { public static void main(String[] args){ short s=3; // s=s+4; //描述 资源 路径 ...
- HDU5126 stars(CDQ分治)
传送门 大意: 向三维空间中加点,询问一个三维区间中点的个数. 解题思路: 带修改CDQ,将修改和询问一起插入CDQ分治询问. (询问可以由8个前缀和加减操作实现) 其中第一层CDQ维护x有序. 第二 ...
- Django项目之Web端电商网站的实战开发(一)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶电商项目开发流程 三丶项目需求 四丶项目架构概览 五丶项目数据库设计 六丶项目框架搭建 一丶项目介绍 产品 ...
- 【Thinkphp学习】TP3.2.3在PHP5.5环境下运行非常慢
在做项目时遇到了一个瓶颈问题:老项目迁移到PHP5.5环境后打开网页很卡很慢. 服务器环境为:apache+php5.5.38+mysql,使用框架为Thinkphp3.2.3. 经过多方面排查找到了 ...
- hdu5387 Clock
Problem Description Give a time.(hh:mm:ss).you should answer the angle between any two of the minute ...
- [Angular] Use :host-context and the ::ng-deep selector to apply context-based styling
If you want to style host component. You can use ':host-context'. // host @Component({ selector: 'my ...
- Codeforces 559A Gerald's Hexagon 数三角形
题意:按顺序给出一个各内角均为120°的六边形的六条边长,求该六边形能分解成多少个边长为1的单位三角形. 把单位三角形面积看做1,实际上就是求六边形面积.随便找六边形的三条互相不相邻的边,分别以这三条 ...
- 19. Spring Boot Shiro 权限管理
转自:https://blog.csdn.net/catoop/article/details/50520958
- web service 原理
Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...
- 【JAVASE】Java同一时候抛出多个异常
Java有异常抛出后.跳出程序.一般无法运行接下来的代码. 大家做登陆功能.常常会实username和password的登陆校验,username或者password错误.假设通常是提示usernam ...