• 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的? 

  • 相关阅读:
    Symfony2 学习笔记之报错
    Symfony2学习笔记之数据校验
    Symfony2学习笔记之HTTP Cache
    Symfony2学习笔记之表单
    Symfony2 学习笔记之插件格式
    Symfony2学习笔记之数据库操作
    Symfony2 学习笔记之内部构件
    Symfony2 学习笔记之模板使用
    让VIEWSTATE从页面中完全消失(小技巧)
    打包bat等文件成exe,双击运行不显示dos窗口,exe不报毒
  • 原文地址:https://www.cnblogs.com/tangjuanj/p/13177865.html
Copyright © 2020-2023  润新知