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;

    }

     

  • 相关阅读:
    jquery ui autocomplete
    解决IIS服务和用户上传的文件分别部署在不同的电脑上时,解决权限的问题
    wpf一些例子
    t-sql 笔记(2)
    t-sql 笔记(1)
    测试基础之软件测试模型
    测试用例设计方法之错误猜测法
    测试用例设计方法之边界值分析法
    批处理文件将多台连接的手机安装同一个APP
    安卓和IOS抓包工具
  • 原文地址:https://www.cnblogs.com/wen-1992/p/4760899.html
Copyright © 2011-2022 走看看