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不能处理事件,则将其丢弃

 

转载于:https://www.cnblogs.com/xiaofei993/p/5344995.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql router 介绍_MySQL Router 介绍篇

MySQL Router 是什么?相信还有很多人没有听说过MySQL Router,很多人对它还不了解,在这篇文章里,将对MySQL Router进行一个简明介绍。首先,介绍一下MySQL Router推出的背景。MySQL Router 是一个轻量级的中间件&#xf…

react 更新input 默认值setfieldsvalue_值得收藏的React面试题

react1、什么是虚拟DOM?难度: ⭐虚拟 DOM (VDOM)是真实 DOM 在内存中的表示。UI 的表示形式保存在内存中,并与实际的 DOM 同步。这是一个发生在渲染函数被调用和元素在屏幕上显示之间的步骤,整个过程被称为调和。2、类组件和函数组件之间的区…

实验二Step1-有序顺序表

1 #include<stdio.h>2 3 struct job4 {5 char name[10];//作业名称6 char status;//当前状态7 int arrtime;//到达时间8 int reqtime;//要求服务时间9 int startime;//调度时间 10 int finitme;//完成时间 11 float TAtime,TAWtime;//周转时…

mysql修改的值子查询语句_MySQL的SQL语句 - 数据操作语句(13)- 子查询(13)

子查询的限制● 通常&#xff0c;不能在子查询中修改表并从同一表中进行选择。例如&#xff0c;此限制适用于以下形式的语法&#xff1a;1. DELETE FROM t WHERE ... (SELECT ... FROM t ...);2. UPDATE t ... WHERE col (SELECT ... FROM t ...);3. {INSERT|REPLACE} INTO t …

ocx控件 postmessage消息会消失_APP控件之二——弹框

弹框分为两种&#xff1a;模态弹框和非模态弹框一、模态弹框模态弹框和非模态弹框最大的区别就是是否强制用户交互。模态弹框会打断用户的当前操作流程&#xff0c;用户不在弹框上操作的话&#xff0c;其余功能都使用不了。优点是&#xff1a;可以很好的获取的用户的视觉焦点缺…

结对编程(1)

我的结对编程项目搭档是王以正&#xff0c;我们的代码也是基于他个人项目的代码修改的。 由于王以正同学不在宿舍住也不怎么会宿舍&#xff0c;我们结对编程的时间较少&#xff0c;不过他将他的代码代码放到了github上面&#xff0c;这也让我有机会学习了github的使用。感觉这个…

mysql sqldump_mysql sqldump 备份

参考&#xff1a;https://www.cnblogs.com/linuxk/p/9371475.html1. windows 下面 创建 dump.bat 文件&#xff1a;文件内容如下"C:\Program Files\MariaDB 10.4\bin\mysqldump" -u root -p123456 metadata > D:\DB\mysql\metadata.sql备注&#xff1a; 这个是ma…

伪代码block转换成程序流程图_程序设计基础

1、程序与程序设计语言的基本知识1&#xff09;程序&#xff1a;为解决某一问题而采用程序设计语言编写的一个指令集合。程序算法&#xff08;对操作的描述&#xff09;数据结构&#xff08;对数据的描述&#xff09;程序设计语言语言工具和环境。2&#xff09;程序的特点&…

Java Map用法

Map简介 将键映射到值的对象。一个映射不能包含重复的键&#xff1b;每个键最多只能映射到一个值。此接口取代 Dictionary 类&#xff0c;后者完全是一个抽象类&#xff0c;而不是一个接口。 Map 接口提供三种collection 视图&#xff0c;允许以键集、值集或键-值映射关系集的形…

mysql 内联函数_C++之内联函数

C继承C的一个重要特性是效率&#xff0c;在C中保护效率的一个方法是使用宏(macro),宏的实现是使用预处理器而不是编译器&#xff0c;预处理器直接用宏代码替换宏调用&#xff0c;所以就没有了参数压栈、生成汇编语言的CALL、返回参数、执行汇编语言的RETURN的时间花费&#xff…

10桌面管理文件收纳_二十余件精选桌面好物推荐,让学习工作生活满满正能量!...

这些提升办公桌幸福感的好物&#xff0c;能让你的学习与工作正能量满满&#xff01;01 笔记本支架笔记本是为了人们出行方便而设计的&#xff0c;显示器的位置并没有照顾到长期对着显示器码字的人群&#xff0c;许多以笔记本为主力的办公族也被迫成为了低头族。绿巨能(llano)笔…

osm 搭建离线地图_使用离线OSM离线OpenLayers Web应用程序

我m trying to create map based web app which user can set landmark on the provided map. Boundaries of map is limited to a small city, and the client computer is always offline, no internet access at all. After a whole day of googling I已经发现OpenLayers和O…

图像水平梯度和竖直梯度代码_Opencv图像处理(三)

晓强Deep Learning的读书分享会&#xff0c;先从这里开始&#xff0c;从大学开始。大家好&#xff0c;我是晓强&#xff0c;计算机科学与技术专业研究生在读。我会不定时的更新我的文章&#xff0c;内容可能包括深度学习入门知识&#xff0c;具体包括CV&#xff0c;NLP方向的基…

php5 mysql 源_CentOS 7.4使用yum源安装MySQL5.7

从CentOS 7.0发布以来&#xff0c;yum源中开始使用Mariadb来代替MySQL的安装。即使你输入的是yum install -y mysql , 显示的也是Mariadb的安装内容。使用源代码进行编译安装又太麻烦。因此&#xff0c;如果想使用yum安装MySQL的话&#xff0c;就需要去下载官方指定的yum源&…

Thinkphp kindeditor 内容转义

参考了:【解决】ThinkPHP整合Html编辑器时出现自动转义的问题 遇到问题也是保存到数据库中的内容&#xff0c;会转义成“\&quot;” 使用 $data[content] stripslashes(htmlspecialchars_decode($_POST[content])); 可以将"\&quot;"的转义处理好。转载于:htt…

hash 值重复_面试题:HashSet是如何保证元素不重复的

面试官&#xff1a;你能简单介绍List和Set有什么区别吗&#xff1f;小憨&#xff1a;List是一个有序的集合&#xff0c;在内存是连续存储的&#xff0c;可以存储重复的元素&#xff0c;List查询快&#xff0c;增删慢&#xff1b;Set是一个无序的集合&#xff0c;在内存中不连续…

RabbitMQ 原文译03--发布和订阅

发布/订阅 在之前的案例中我们创建了一个工作队列,这个工作队列的实现思想就是一个把每一个任务平均分配给每一个执行者,在这个篇文章我们会做一些不一样的东西,把一个消息发送给多个消费者,这种模式就被称作"发布/订阅". 为了说明这个模式,我们将要创建一个简单的日…

html富文本编辑器插件_vue中使用vuequilleditor富文本编辑器

点击上方“小姚同学技术栈”快速关注我哟&#xff01;vue-quill-editor是一个基于quill、适用于vue的富文本编辑器开源项目&#xff0c;支持服务端渲染和单页应用。目前项目热度还算可以&#xff0c;如果不考虑使用markdown&#xff0c;vue-quill-editor是一个比较好的选择。本…

python面向对象怎么解决_Python面向对象编程1

前言面相对象是Python的重要特性&#xff0c;继承了C的类风格&#xff0c;在Python中的一切数据类型都是面向对象的。本章主要介绍Python的面向对象编程。面向对象&#xff1a;什么是OOP(面向对象)&#xff0c;Object Oriented Programming&#xff0c;原来就是面向对象的编程啊…

二元函数图像生成器_GAN生成图像综述

点击上方“CVer”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达作者&#xff1a;YTimo(PKU EECS) 研究方向&#xff1a;深度学习&#xff0c;计算机视觉本文转载自&#xff1a;SIGAI摘要生成对抗网络(Generative adversarial network, GAN)…