zoukankan      html  css  js  c++  java
  • UI进阶--触摸事件的产生和传递

    事件的产生和传递:

    • 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中;
    • UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow);
    • 主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步;
    • 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理;
    • touchesBegan
    • touchesMoved
    • touchedEnded

     

    如何找到最合适的控件来处理事件?

    .判断自己是否能接收触摸事件?

       控件不接收触摸事件的三种情况

       1> 不接收用户交互 userInteractionEnabled=NO

       2> 隐藏 hidden = YES

       3> 透明 alpha = 0.0 ~ 0.01

    .判断触摸点是否在自己身上?

       1、判断触摸点在不在自己身上,view有一个方法【-(BOOL)pointInside:withEvent:

       2、返回NO,就代表不在自己身边上,那不再遍历子控件

       3、返回YES,代表点在自己向上,那继续遍历子控件

    .从后往前遍历子控件,重复前面的两个步骤

    .如果没有符合条件的子控件,那么就自己最适合处理的控件

    .找到最适合的控件后就调用touchesBegin/touchesMoved/touchesEnded方法

     

    事件传递的示例:

    触摸事件的传递是从父控件传递到子控件
    点击了绿色的view:

    UIApplication -> UIWindow -> 白色 -> 绿色

    点击了蓝色的view:

    UIApplication -> UIWindow -> 白色 -> 橙色 -> 蓝色

    点击了黄色的view:

    UIApplication -> UIWindow -> 白色 -> 橙色 -> 蓝色 -> 黄色

    注意:如果父控件不能接收触摸事件,那么子控件就不可能接收到触摸事件

     

  • 相关阅读:
    软件架构设计箴言理解
    解决vs2010没有NET Framework 2.0和3.5
    .NET连接数据库实例
    CSS选择器大全
    SilverLight全屏代码
    SilverLight数字时钟 > 我的博客有SilverLight了
    comboBox设置为只读(只选)
    WinForm 单例模式实例
    标识种子和标识增量
    jQuery固定DIV实现“返回顶部”
  • 原文地址:https://www.cnblogs.com/xiaomoge/p/4204816.html
Copyright © 2011-2022 走看看