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
网友评论