美文网首页
iOS事件传递和响应

iOS事件传递和响应

作者: timtory | 来源:发表于2022-01-18 23:40 被阅读0次

    iOS三大事件类型

    1、触摸
    2、加速
    3、远程控制
    

    响应事件的条件

    1、userInteractionEnabled == true
    2、alpha>0.01
    3、hidden = false
    

    系统确认处理响应的方法

    // 确认点击范围是否在该控件
    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
    // 返回控件 (自身 nil  以及subview...)
    - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    

    涉及到的其他方法

    //CGGeometry: CG几何  C函数 判断点是否在rect内
    CGRectContainsPoint(CGRect rect, CGPoint point)
    //点坐标转换
    - (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;
    - (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;
    

    打印传递链

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        UIResponder  *next = self;
        NSMutableString *mString = @"".mutableCopy;
        [mString appendString:@"->"];
        while (next!=nil) {
            [mString appendString:NSStringFromClass([next class])];
            next = [next nextResponder];
            [mString appendString:@"->"];
        }
        NSLog(@"Responder:%@",mString);
    }
    

    结果

    CView->BView->
    UIView->ViewController->
    UIDropShadowView->UITransitionView->UIWindow->UIWindowScene->
    UIApplication->
    AppDelegate->
    

    传递和响应和检测顺序

    传递顺序:port->应用->AppDelegate->...->CView
    响应判断顺序:CView->...->AppDelegate
    检测顺序:AppDelegate->..->CView
    注意:
    当前View-pointInside合格 就会进一步倒序检查它的subViews  
    因为要从最上面的subView开始检查  
    并且subView只有一个可以响应 
    如果要想一个多个可以在处理事件中转发
    

    相关文章

      网友评论

          本文标题:iOS事件传递和响应

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