美文网首页
ios 事件传递链

ios 事件传递链

作者: _秃头少女_ | 来源:发表于2019-06-13 18:26 被阅读0次

1.app手机触摸事件

当点击屏幕,应用程序会添加事件到UIApplication事件队列,当触摸事件出队列后UIApplication为该事件寻找最佳响应者

2.触摸

UITouch

3.触摸事件

触摸事件即UIEvent。
UIEvent即对UITouch的一次封装。由于一次触摸事件并不止有一个触摸对象,可能是多指同时触摸。触摸对象集合可以通过allTouches属性来获取。

4.响应者

响应者即UIResponser
下列实例都是UIResponser:
UIView
UIViewController
UIApplication
Appdelegate

5.寻找最佳响应者(Hit-Testing)

a.hitTest:withEvent://判断自己能否接收触摸事件,返回最佳响应view,如果没有 返回nil ,那么最合适的view就是该控件的父控件。
b.pointInside:withEvent://判断触摸事件是否在视图范围内
视图如何判断自己能否响应触摸事件?

下列情况下,视图不能响应触摸事件:
1.触摸点不在试图范围内。
2.不允许交互:视图的userInteractionEnabled = NO。
3.隐藏:hidden = YES,如果视图隐藏了,则不能响应事件。
4.透明度:当视图的透明度小于等于0.01时,不能响应事件。

1.UIApplication 把事件传递给窗口对象(UIWindow),如果有多个UIWindow对象,则先选择最后加上的UIWindow对象。
2.若UIWindow对象能响应这个触摸事件,则继续向其子视图传递,向子视图传递时也是先传递给最后加上的子视图
3.若子视图无法响应该事件,则返回父视图,再传递给倒数第二个加入该父视图的子视图

所以事件的传递顺序是这样的:

产生触摸事件->UIApplication事件队列->[UIWindow hitTest:withEvent:]->返回更合适的view->[子控件 hitTest:withEvent:]->返回最合适的view

https://www.jianshu.com/p/4aeaf3aa0c7e

相关文章

网友评论

      本文标题:ios 事件传递链

      本文链接:https://www.haomeiwen.com/subject/hxjsfctx.html