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;

    }

     

  • 相关阅读:
    rest-framework框架——解析器、ur控制、分页、响应器、渲染器
    rest-framework框架——认证、权限、频率组件
    rest-framework框架——视图三部曲
    rest-framework框架——APIView和序列化组件
    Django——CBV与FBV
    CRM——权限
    CRM——销售与客户
    CRM——讲师与学生
    CRM——起步
    jsp标签
  • 原文地址:https://www.cnblogs.com/wen-1992/p/4760899.html
Copyright © 2011-2022 走看看