事件的生命周期:
屏幕快照 2020-02-07 下午6.01.34.png
从父控件传递到子控件:
UIApplication——>window——>寻找处理事件最合适的view
如何找到最合适的控件:
1.判断keywindow自己是否能接受触摸事件(如父控件不能接受触摸事件,子控件就不可能接收到触摸事件)
2.判断触摸点是否在自己身上
3.子控件组中从后面前遍历子控件(重复前两步)
4.找到view,如fitview把事件交给fitview再便利这个fitview的子控件
iOS中的事件
1.触摸事件
2.加速计事件
3.远程控制事件
响应对象UIResponder
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接受并处理事件,我们称之为“响应者对象”.
以下都是继承自UIResponder的,所以都能接收并处理事件
UIApplication, UIViewController, UIView
为什么继承了UIResponder的类能够接收并处理事件呢?
因为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;
事件的处理:
我们可以通过重写触摸事件的方法,自定义手势等.
需要注意:在处理UIView的触摸事件时,必须要自定义UIView子类继承自UIView.因为UIView的.m文件不是开源的,但是如果是处理UIViewController的触摸事件的话,可以在控制器的.m文件直接重写那四个方法.
网友评论