iOS事件响应机制总结
来源:互联网 发布:ps cs3 for mac版 编辑:程序博客网 时间:2024/05/21 10:39
事件分类
1. 高级事件:控件的点击事件/手势2. 低级事件:触摸事件
响应流程:
1. 当发生一个触摸事件的时候,系统会把它打包成UIEvent对象,放到由UIApplication管理的一个事件队列里面2. 等到合适的时机(runloop的运行循环有关),UIApplication会从队头取出一个事件,交给UIWindow对象去处理3. UIWindow会在视图层级结构中找到最合适的视图让其去处理这个事件 1. window会选中交给离自己最近的视图 2. 调用该视图的-(UIView *)hitTest CGPoint(point) :withEvent(UIEvent *)event方法 * 方法逻辑 1. 判断当前视图是否可以传递事件,以下有任一条件满足进入2,否则返回nil * 视图.userInteractionEnabled = YES * 视图.hidden = NO * 视图.alpha>0.01 2. 判断视图是否在触摸点范围内:通过-(BOOL)pointInSide CGPoint(point) :wihtEvent(UIEvent *)event,返回yes进入3,否则返回nil 3.遍历当前视图的子视图 * 通过:[self convertPoint:point toView:视图.subviews[i]] * 给子视图调用hitTest方法,返回一个fitView * 如果第2步返回的fitView为真的话,就return 该fitView,否则返回nil 4. 子视图中没有找到退出了循环,返回self,自己就是hitTestView
代码演示
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ if (!self.userInteractionEnabled||self.hidden==YES||self.alpha<0.01) { return nil; } if (![self pointInside:point withEvent:event]) { return nil; } for (int i = 0; i<self.subviews.count; i++) { UIView *childView = self.subviews[i]; CGPoint childPoint = [self convertPoint:point toView:childView]; if ([childView hitTest:childPoint withEvent:event]) { return childView; } } return self;}
处理事件
1. 前提 * 重写了UIResponse的touch系列方法 **touch系列方法中touchbegin一点要调用** * button的addtarget * textField的becomFirstResponser2. nextResponser * 当前视图是一个普通view,nextResponser就是其父view * 当前视图是一个控制器的view, nextResponser就是其控制器但是如果想要在viewDidLoad方法中打印出view的nextResponser是行不通,因为这个方法调用时间比较早,座椅可以推迟一些时间
拦截事件
* 在UIApplication中拦截,事件就不会被分发下去,重写其sendEvent方法,实现事件的过滤* 在离他最近的父view中也可以,重写hitTest::方法
事件处理顺序
1. view-fatherView->fatherViewController->window->UIApplication->UIApplelegate->废弃
阅读全文
0 0
- iOS事件响应机制总结
- iOS事件响应机制
- iOS事件传递响应机制
- ios触摸事件响应链个人总结
- ios 事件传递和响应的总结
- iOS 事件响应链机制 及 触摸事件(hitTest)
- iOS 事件传递机制和响应者链条
- iOS事件的分发机制和响应者链(Swift)
- iOS之事件的传递和响应机制
- iOS 事件传递机制和响应者链条
- iOS之事件的传递和响应机制-原理篇
- iOS事件传递和响应机制-原理篇
- Swing事件响应机制
- JAVA事件响应机制
- 事件响应机制
- vtk事件响应机制
- cocos事件响应机制
- ios 响应者链及相关机制总结
- Labyrinth HDU
- android 判断APP是否第一次打开
- L1-028. 判断素数
- 如何向OpenStack贡献代码
- MAC配置JAVA环境变量
- iOS事件响应机制总结
- PHP类基本写法
- Linux 安装Mono环境 运行ASP.NET(一)
- 啊哈!算法-------算法类书籍
- PHP 文件处理
- 暑期培训7日游解题思路(day1~day3)
- 队列的入队、出队操作
- 第二章 第一节:数据库数据类型
- 企业剖析 | 计算的旋律—阿里云视觉语言的探索