0
点赞
收藏
分享

微信扫一扫

iOS UIEvent 事件传递 流程

绪风 2023-05-22 阅读 40



新建三个类 UIWindow, UIController, UIView;

这三个类,分别写上其 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event     方法

UIController
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSLog(@"controller1 touchBegan");
    [supertouchesBegan:touches withEvent:event];
    NSLog(@"controller2 touchBegan");
}

 UIView 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSLog(@"the1 Touch view");
    [supertouchesBegan:touches withEvent:event];
    
    NSLog(@"the2 Touch view");
    
}
 程序运行结果: 
 test_touch[5497:227250] the1 Touch view
 test_touch[5497:227250] controller1 touchBegan
 test_touch[5497:227250] controller2 touchBegan
 test_touch[5497:227250] the2 Touch view
 


//分发事件
- (void)sendEvent:(UIEvent *)event {
//    NSLog(@"sendEvent1 TouchWindow");
    
    [super sendEvent:event];
    
//    NSLog(@"sendEvent2 TouchWindow");
}
 

 

我们知道事件的分发是由Application到Window再到各级View的,所以显然最安全可靠的拦截地方是Application。这里拦截事件后如果不手动往下分发,则进入hit-test View过程的机会都没有。

UIApplication和UIWindow都有sendEvent:方法,用来分发Event。我们可以继承类,重新实现sendEvent:方法,这样就可以拦截下事件,完成一些特殊的处理。

举报

相关推荐

0 条评论