首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
响应者链的事件传递过程
时间:
2014-12-02 13:33:28
阅读:
168
评论:
0
收藏:
0
[点我收藏+]
标签:
事件响应原理
响应者链的事件传递过程
一、
hitText方法
1、
hitText方法在
一个事件传递给一个控件的时候,控件就会调用这个方法
2、
hitText
作用
:
寻找到最合适的
view
。
3、hitText方法
1)、
判断窗口能不能处理事件
?
如果不能,意味着窗口不是最合适的
view
,而且也不会去寻找比自己更合适的
view,
直接返回
nil
,
通知
UIApplication
,没有最合适的
view
。
2)、
判断触摸点在不在窗口。
3)、
遍历自己的子控件,寻找有没有比自己更合适的
view。
4)、
如果子控件不接收事件,意味着子控件没有找到最合适的
view,
然后返回
nil
,
告诉窗口没有找到更合适的
view,
窗口就知道没有比自己更合适的
view,
就自己处理事件。
//
找最合适的
view
// point
是白色
View
的坐标系上的点
- (
UIView
*)hitTest:(
CGPoint
)point withEvent:(
UIEvent
*)event
{
// 1.
判断自己能否接收事件
if
(
self
.
userInteractionEnabled
==
NO
||
self
.
hidden
==
YES
||
self
.
alpha
<=
0.01
)
return
nil
;
// 2.
判断点在不在当前控件上面
if
(![
self
pointInside
:point
withEvent
:event])
return
nil
;
// 3.
去找有没有比自己更合适的
view
//
从后往前遍历自己的子控件
int
count =
self
.
subviews
.
count
;
for
(
int
i = count -
1
; i >=
0
; i--) {
//
获取子控件
UIView
*childView =
self
.
subviews
[i];
//
转换坐标系
//
把自己坐标系上的点转换成子控件做坐标系上的点
CGPoint
childPoint = [
self
convertPoint
:point
toView
:childView];
UIView
*fitView = [childView
hitTest
:childPoint
withEvent
:event];
//
找到最合适的
view
if
(fitView) {
return
fitView;
}
}
//
没有找到比自己更合适的
view
return
self
;
}
/**
*
判断点在不在方法调用者的坐标系上
* point:
是方法调用者的坐标系上的点
*/
- (
BOOL
)pointInside:(
CGPoint
)point withEvent:(
UIEvent
*)event
{
return
NO
;
}
注意:
1、
touch
的默认做法:自己不处理,交给上一个响应者。
2、
上一个响应者默认是父控件。
二、响应者链的事件传递过程:
1.
如果
view
的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父视图。
2.
在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给
window
对象进行处理
3.
如果
window
对象也不处理,则其将事件或消息传递给
UIApplication
对象
4.
如果
UIApplication
也不能处理该事件或消息,则将其丢弃。
响应者链的事件传递过程
标签:
事件响应原理
原文地址:http://blog.csdn.net/itcontend/article/details/41677433
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!