美文网首页
iOS 事件的产生和传递

iOS 事件的产生和传递

作者: CrystalZhu | 来源:发表于2020-02-07 18:27 被阅读0次

    事件的生命周期:


    屏幕快照 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文件直接重写那四个方法.

    相关文章

      网友评论

          本文标题:iOS 事件的产生和传递

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