zoukankan      html  css  js  c++  java
  • iOS事件传递机制

    https://juejin.im/post/5d396ef7518825453b605afa

    我的理解:

    第一步:
    hit-testing找到:hit-test view/window,保存在哪里呢?
    找到响应者链/响应者链中的view链,保存在哪里呢?
    第二步:
    第一个touch:
    (1)touch 初始化,沿着链条找哪些要响应 event?(不知道保存在哪里)
    (2)沿着链条找哪些要响应 touch,保存在 touch 的 gestures 中
    手指移动:
    (3)遍历 touch 中 gestures, 调用 touchMoved
    手指抬起:
    (4)遍历 touch 中 gestures, 调用 touchEnd
    (5)在响应 touch 的过程中,有些 touch 中保存的 gesture 有些会被移除掉
    (6)touch 和 有可能的 gestures 被保存在 手势环境中
    第三步:
    第二个touch:
    。。。。
    手势被识别

    demo1:
    单击事件:
    ----- 手指点下 -----
    // 探测阶段
    (1)hit-testing
    // 手势处理阶段
    (2)手势代理:是否接收 event (调用顺序按照视图层级)
    (3)手势代理:是否接收 touch
    (4)接收的话,调用手势的 touchBegan
    // view 处理阶段
    (5)调用 view 的 touchBegan
    ----- 手指放开 -----
    (6)手势的 hit-test view 是否 begin(hit-test view 被 touch 保存吗?)
    (7)手势代理:手势被识别,是否 begin,不begin就失败了
    (8)调用手势的 touchEnd
    (9)被识别的话,调用 view 的 touchCancel,没有被识别的话,调用 view 的 touchEnd

    demo2:
    双击事件
    ----- 手指点下 -----
    // 探测阶段
    (1)hit-testing
    // 手势处理阶段
    (2)手势代理:是否接收 event (调用顺序按照视图层级)
    (3)手势代理:是否接收 touch
    (4)接收的话,调用手势的 touchBegan
    // view 处理阶段
    (5)调用 view 的 touchBegan
    ----- 手指放开 -----(这里没有调用 view 的 touchEnd 耶)
    (6)调用手势的 touchEnd
    ----- 手指点下 -----(也没有调用 view 的 touch 方法)
    (7)手势代理:是否接收 touch
    (8)调用手势的 touchBegan
    ----- 手指放开 -----
    (9)手势的 hit-test view 是否 begin(hit-test view 被 touch 保存吗?)
    (10)手势代理:手势被识别,是否 begin,不begin就失败了
    (11)调用手势的 touchEnd
    (12)调用 selector
    (13)调用 view 的 touchCancel

    疑问:

    当两个手势都被触发了,并且不可同时响应时,系统是通过什么判断调用哪个selector的? 

  • 相关阅读:
    用 xampp 在 windows/Linux 下搭建代理服务器
    DOM 元素 属性和方法
    JavaScript入门培训材料(Copy至此以作备份)
    JavaScript 关键字快速匹配
    JS参考书籍
    chrome 阻止跨域操作的解决方法 --disable-web-security
    可输入自动匹配Select——jquery ui autocomplete
    【消息队列】如何保证消息的顺序性
    【消息队列】如何处理消息丢失的问题
    【消息队列】kafka是如何保证消息不被重复消费的
  • 原文地址:https://www.cnblogs.com/tangjuanj/p/13177865.html
Copyright © 2011-2022 走看看