iOS-事件传递、响应者链条、事件响应
1.响应者链条
只有继承UIResponder的对象才能够接收并处理事件,UIResponder 是所有响应对象的基类。UIApplication、 UIViewController、 UIWindow 和继承自UIView的UIKit类都直接或间接的继承自UIResponder,所以它们的实例都是可以构成响应者对象。响应者链就是由一系列的响应者对象构成的一个层次结构
2.事件的传递
UIApplication->UIViewController->UIView->UIButton
如果父视图不能接收事件,那么就不会向下传递,子视图也不可能接收处理事件
3.事件的响应
事件传递找到视图UIview的时候首先看view能否处理这个事件,如果能处理则交由其处理并停止该事件的向上响应,如果不能则会将事件传递给其上级视图;如果上级视图无法处理则会继续往上传递;一直到 UIwindow,如果UIwindow不能处理此事件则继续交给UIApplication处理,如果最后UIApplication还是不能处理此事件则将其丢弃。
总结:事件的传递:自上向下
事件的响应:自下向上
4.UIResponder提供了几个处理事件的方法:
//触摸事件
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
//加速计事件
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;
//远程控制事件
- (void)remoteControlReceivedWithEvent:(UIEvent *)event;