zoukankan      html  css  js  c++  java
  • iOS开发触摸事件的传递

    1. iOS中的三种事件类型 触摸事件、加速计事件、远程事件。

    触摸事件:通过触摸、手势进行触发(例如手指点击、缩放)

    加速计事件:通过加速器进行触发(例如手机晃动,典型应用是微信摇一摇)

    远程事件:通过其他远程设备触发(例如耳机控制按钮)

    触摸事件的实现方法有四种,touchBegin/touchesMoved/touchesEnded/touchesCancelled

    2. 触摸事件的传递

      要想响应触摸事件必须得有一个前提,就是该对象必须是响应者对象,继承了UIResponder的对象就是响应者对象,只有响应者对象才能够接收并处理事件

    (1)事件是怎么的产生和传递"

    ①.当手指触摸屏幕后会产生 '触摸事件', 然后将事件加入UIApplication的管理事件队列中

    ②.UIApplication会取出事件队列中 '最前面的事件' 分发下去,事先分发给应用程序的主窗口中 'keyWindow'

    ③.主窗口接收到事件后,分发给自己的子控件,寻找最适合的接收事件的控件

    ④.找到 '最适合' 接收的控件后,调用控件的touchesBegin/touchesMoved/touchesEnded方法

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

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

      /*

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

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

       2> 隐藏 hidden = YES

       3> 透明 alpha = 0.0 ~ 0.01

       */

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

       /*

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

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

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

        */

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

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

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

     (2)响应者链条

    "什么是响应者链条"

    ①.由多个响应者对象连接起来的链条叫做响应者链条

    ②.什么是上一个响应者?

       >如果当前这个view是控制器的view,控制器就是上一个响应者

       >如果当前这个view不是控制器的view,那么父控件就是上一个响应者

    ③.利用响应者链条可以让多个控件处理同一个 "触摸事件"

       "怎么让多个控件处理同一个 ‘触摸事件’ 事件?"

       >在最后适合的控件里调用super的touchesBegan方法,这样就将事件传给上一个响应,上一个响应者也可以处理事件了

    "3、小结:事件的完整处理过程"

    ①.先将事件对象由上往下传递(由父控制传给子控件),找到最适合的控件来处理

    ②.调用最合适的控件的touches...方法

    ③.如果调用了[super touch…],就会将事件顺着响应都链往上传递,传递给上一个响应者

    ④.接着上一个响应者就会调用的touches...方法

    ⑤.如果没有找到最适合的控件来处理事件,则将事件传回来窗口,窗口不处理事件,将事件传给UIApplication

    ⑥.如果Applicatoin不能处理事件,则将其丢弃

  • 相关阅读:
    转载:关于sql server数据库表的主键问题
    centos FTP服务器的架设和配置
    OceanBase,淘宝开源的千亿级别分布式数据库系统。支持读写事务的线上服务
    在Fedora/Redhat/CentOS中防火墙设置
    转:SQL2008调试
    1.4.2 使用ActionScript类
    自写ajax经验总结
    搜索引擎中文分词技术
    优化数据库的方法及SQL语句优化的原则
    因为数据库正在使用,所以无法获得对数据库的独占访问权还原或删除数据库的解决方法
  • 原文地址:https://www.cnblogs.com/xiaofei993/p/5344995.html
Copyright © 2011-2022 走看看