事件传递
来源:互联网 发布:wto关税数据库 编辑:程序博客网 时间:2024/05/27 14:14
事件传递
标签(空格分隔): 事件处理
不能响应事件的三种情况
- 控件不能获得和界面的交互(UIImageView默认就不能获得和界面的交互)
- 控件是隐藏状态
- 控件的alpha(透明度)< 0.01
寻找事件的最佳响应者
- 点击蓝色View,会触发一次点击事件
- 首先点击事件传递给UIApplication
- UIApplication传递给UIWindow(UIWindow接收到事件那一刻执行
hitTest
方法寻找最优响应者)- UIWindow会判断两个问题是否满足
是否能够获得交互
触摸点是否在UIWindow控件范围内
- 如果满足以上两个条件,UIWindow就会从
最外层子控件
开始遍历自己的子控件(当前截图中只有白色的UIView是UIWindow的子控件)
- UIWindow会判断两个问题是否满足
- 白色(UIView)控件接收到事件就调用hitTest方法寻找最优子控件,同样判断两个问题
是否能够获得交互
触摸点是否在UIWindow控件范围内
- 如果满足以上两个条件,UIView就会从
最外层子控件
开始遍历自己的子控件(紫色和绿色都是白色的子控件,但是紫色后添加,所以先传递给紫色(条用紫色控件的hitTest方法),如果紫色同样满足两个条件就继续遍历,最后可能轮到蓝色的时候依旧满足条件且蓝色没有子控件,那么蓝色就是最佳响应者,如果紫色不满足任何一个条件,那么就把时间传递给绿色来继续判断,如果绿色满足条件并且绿色已经没有子控件那么绿色控件就是最优的响应者,)
寻找最合适响应者的方法
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ // 将触摸点转换成相对btn坐标原点的坐标,可通过转换后的坐标判断触摸点是否在btn上 CGPoint p = [self convertPoint:point toView:_btn]; NSLog(@"%@---%@",NSStringFromCGPoint(point),NSStringFromCGPoint(p)); // 如果当前触摸点在btn上就返回按钮,按钮作为最佳响应者 if ([_btn pointInside:p withEvent:event]) { return _btn; } return [super hitTest:point withEvent:event];}
- 此方法的返回值是最合适的View
- 可通过修改此方法的返回值来修改最合适的View
- 参数point是方法调用者坐标系上的触摸点的位置
- 参数event是记录事件的类型(触摸事件,加速计事件,远程控制事件) *
0 0
- 事件传递
- 事件传递
- 事件传递
- 事件传递
- 事件传递
- 事件传递
- 事件传递
- 事件传递
- 事件分发和事件传递
- Porlat 事件传递
- android 事件传递机制
- android 事件传递机制
- Spring-事件传递
- android触摸事件传递
- Activity之间事件传递
- android事件传递机制
- android 事件传递
- Android触摸事件传递
- Oracle的监听(listener)到底是什么
- 23-IO流-41-IO流(File对象-练习-删除目录)
- 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
- cas的rest协议请求方式
- position:absolute 入门理解
- 事件传递
- UNIX网络编程卷一:第十三章 守护进程和inetd超级服务器
- 详解Objective-C runtime
- kafka分区及副本在broker的分配
- zookeeper 伪集群模式安装
- C语言与汇编混合编程
- 23-IO流-42-IO流(Properties集合的-基本功能)
- 使用重写的$.ajax()实现后台处理进度显示(gif)
- android app记录运行日志 捕获奔溃异常 ,存储日志到文件