• ios开发事件处理之:三 :寻找最合适的view


    1:事件的产生与传递:

    2:寻找最合适的view:如何查找最合适的view:需要三步:1:先判断自身是否能接受触摸事件 2:判断触摸点是否在自己身上 3:若前两条都满足,则其会从后往前遍历所有子控件(从后往前遍历是考虑到效率的问题,后指的是子控件数组中的最后一个控件)继续重复12步骤,直到找到最合适的子控件。(控件不能接受触摸事件的三个条件,事件是由父控件传递到子控件,若是父控件都不能接受事件,那么子控件肯定也不能接受事件)

    注意:从后往前遍历子控件:永远遍历的是子控件数组中的最后一个,也就是最后添加到父视图上的子控件

    上图中的子控件的添加顺序:1:先添加的是红色的控件view,再添加蓝色的控件view,随后添加黄色,绿色,最后添加紫色

    例如:当点击绿色的view后,系统会将事件发送到UIApplecation管理的事件队列中,UIApplecation会从事件队列中取出最前端的事件交给主窗口KeyWindow,此时KeyWindow做判断自己可以接受触摸事件,触摸点在自己的身上,满足两个条件,此时KeyWindow会寻找有没有更合适的view,此时KeyWindow会从后往前遍历子控件,拿到子控件白色的view后继续判断是否满足两个条件,不满足则事件不会继续传递,若满足,则白色的view又会从后往前遍历子控件,先查看白色控件子控件数组中的最后一个也就是蓝色控件,在查看紫色的view,在查看黄色的view,再看看绿色的view,是否满足条件,不满足则停止传递或是继续传递给子控件,停止传递的原因就是涉及到用户交互的问题,若是子控件也不能接收事件,则此时自己也就是父视图为最合适的view,父视图会对此事件进行处理(ViewUI,最顶层是UIWindow,记住最重要一点是:事件的传递是由父控件传递到子控件,父控件不能接受事件则子控件也不能接收事件,控件不能接受触摸事件的三个条件)

    3:事件传递调用的最底层的方法:1:当view接收到触摸事件的时候就会调用,-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 方法底层会调用,-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event。在调用第一个方法的时候会先调用第二个方法。2:一般若是想反悔任意一个view处理点击事件,则一般考虑在父视图中重写两个方法,在第一个方法中反回子控件的view

    //作用:去寻找最适合的View

    //什么时候调用:当一个事件传递给当前View,就会调用.

    //返回值:返回的是谁,谁就是最适合的View(就会调用最适合的View的touch方法)

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

        NSLog(@"%s",__func__);

        

        UIView *fitView = [super hitTest:point withEvent:event];

        //NSLog(@"%@",fitView);

        //return  self.subviews[0];

        return fitView;

    }

     //作用:判断当前点在不在它调用View,(谁调用pointInside,这个View就是谁)

    //什么时候调用:它是在hitTest方法当中调用的.

    //注意:point点必须得要跟它方法调用者在同一个坐标系里面

    -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{

        NSLog(@"%s",__func__);

        return NO;

    }

  • 相关阅读:
    zookeeper使用场景
    zookeeper安装配置
    hadoop 远程调试
    deep learning笔记
    Sentiment Analysis(1)-Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    PRML阅读笔记 introduction
    Python 学习笔记(2)
    python nltk 学习笔记(5) Learning to Classify Text
    python nltk 学习笔记(4) Writing Structured Programs
    python nltk 学习笔记(3) processing raw text
  • 原文地址:https://www.cnblogs.com/cqb-learner/p/5811316.html
Copyright © 2020-2023  润新知