zoukankan      html  css  js  c++  java
  • 响应者链的事件分发

      响应者链的事件分发:从Window的视图开始分发向上传(向内部传),一定要分清楚谁是谁的子视图以及同级视图中他们的先后顺序,具体流程请看代码

    //分发事件的方法

    /*

     0.判断该点是否在视图内,如果不是返回nil

     1.遍历子视图(倒序)

     2.转换坐标系

     3.分发给子视图

     4.查看触摸点在不在子视图中 在的话子视图调用hitTest,如果有返回值,直接返回,循环结束,方法结束

     5.如果没有,返回self

     */

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{

       

        NSLog(@"-----a");

      // 0.判断点 是否在本身的bounds内

      BOOL inside =  [self pointInside:point withEvent:event];

        if (!inside) {

            return nil;

        }

       //1.遍历子视图

        for (int i =(int)self.subviews.count-1;i>=0; i--) {

            //获取subView

            UIView *subView = [self.subviews objectAtIndex:i];

            //converPoint toView转换到子视图的坐标系

           CGPoint p = [self convertPoint:point toView:subView];

           

            //判断子视图的hitTest方法有没有返回值,如果没有返回值,继续循环

            UIView *view = [subView hitTest:p withEvent:event];

            

            if ([subView pointInside:p withEvent:event]) {

                if (view) {

                    return view;

                }

            }

         }

      //5.r如果没有子视图,返回self

        return self;

    }

     

  • 相关阅读:
    Qt计算器开发(三):执行效果及项目总结
    [HNOI2019]校园旅行
    How to fix nuget Unrecognized license type MIT when pack
    How to fix nuget Unrecognized license type MIT when pack
    git 通过 SublimeMerge 处理冲突
    git 通过 SublimeMerge 处理冲突
    git 上传当前分支
    git 上传当前分支
    gif 格式
    gif 格式
  • 原文地址:https://www.cnblogs.com/wen-1992/p/4760899.html
Copyright © 2011-2022 走看看