iOS学习笔记之触摸事件&UIResponder
iOS学习笔记之触摸事件&UIResponder
触摸事件
与触摸事件相关的四个方法如下:
一根手指或多根手指触摸屏幕
-(void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event;
一根手指或多根手指在屏幕上移动(随着手指的移动,相关的对象会持续发送该消息)
-(void)touchesMoved:(NSSet *)touches
withEvent:(UIEvent *)event;
一根手指或多根手指离开屏幕
-(void)touchesEnded:(NSSet *)touches
withEvent:(UIEvent *)event;
在触摸操作正常结束之前,某个系统事件(例如有电话进来)打断了触摸过程
-(void)touchesCancelled:(NSSet *)touches
withEvent:(UIEvent *)event;
UITouch对象和事件相应方法的工作机制
一个UITouch对象对应屏幕上的一根手指。只要手指没有离开屏幕,相应的UITouch对象就会一直存在。这些UITouch对象都会保存对应的手指在屏幕上的当前位置
在触摸事件的持续过程中,无论发生什么,最初发生触摸事件的那个视图都会在各个阶段收到应用的触摸事件消息。即使手指在移动时离开了这个视图的frame区域,系统还是会向该视图发送touchesMoved:withEvent:和touchesEnded:withEvent:消息。也就是说,当某个视图发生触摸事件后,该视图将永远“拥有”当时创建的所有UITouch对象。
自己编写的代码不需要也不应该保留任何UITouch对象。当某个UITouch对象的状态发生改变时,系统会向指定的对象发送特定的事件消息,并传入发生变化的UITouch对象
iOS在处理触摸事件的机制和windows中的消息机制很相似。当某个应用发生触摸事件后,系统都会将该事件添加到一个事件队列里,这个事件队列是由UIApplication单例管理的。UIApplication会向“拥有”该事件的视图发送特定的UIResponder消息,收到消息的视图会进行进一步的处理。
多点触摸
默认情况下,视图在同一时刻只能接收一个触摸事件。如果一根手指已经出发了touchesBegan:withEvent:方法,那么在手指离开屏幕之前(触发touchesEnded:withEvent:方法之前),其他触摸事件都会被忽略。为此,需要在接收触摸事件的UIView的初始化方法中添加如下代码,以允许多点触摸
self.multipleTouchEnabled = YES;
响应对象链
UIResponder对象的子类对象除了UIView外,还包括UIViewController、UIWindow和UIApplication,这些对象能够通过响应对象链接收事件。
UIResponder对象拥有一个名为nextResponder的指针,相关的UIResponder对象可以通过该指针组成一个响应对象链,如下图所示

当UIView对象属于某个UIViewController对象时,其nextResponder指针就会指向包含该视图的UIViewController对象。当UIView对象不属于任何UIViewController对象时,其nextResponder指针就会指向该视图的父视图。UIViewController对象的nextResponder指针通常会指向其视图的父视图。最顶层的父视图是UIWindow对象,而UIWindow对象的nextResponder指向的是UIApplication单例。
如果没有为某个UIResponder对象覆盖特定的事件处理方法,那么该对象的nextResponder会尝试处理相应的触摸事件。事件会沿着响应对象链传播,知道传递给UIApplication对象(响应对象链的最后一个对象),如果UIApplication也无法处理事件,系统就会丢弃该事件。
iOS学习笔记之触摸事件&UIResponder的更多相关文章
- iOS学习笔记07-运动事件和远程控制
之前我们已经学习了触摸处理和手势识别,其实这两个同属于iOS事件的触摸事件,今天我们来学习下iOS事件的另外两个事件: 一.运动事件 运动事件,是通过加速器进行触发,和触摸事件一样,继承UIRespo ...
- iOS学习笔记05-触摸事件
一.事件分发处理[由外到内] 在iOS中发生触摸后,事件会加到UIApplication事件队列,UIApplication会从事件队列取出最前面的事件进行分发处理,通常会先分发给主窗口,主窗口会调用 ...
- Cocos2d-x 学习笔记(16) 触摸事件与分发 EventTouch dispatchTouchEvent EventListenerTouch
1. EventTouch 触摸事件的成员变量:枚举EventCode.存储Touch的容器. 不同的EventCode代表不同时机的触摸事件,能让监听器调用不同的回调函数. enum class E ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- iOS学习笔记之UITableViewController&UITableView
iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
随机推荐
- Eclipse快捷键大全,导包快捷键:ctrl+Shift+/【转】
Ctrl+Shift+L 显示所有快捷键 Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复 ...
- Tomcat 或JBOSS java.lang.ArrayIndexOutOfBoundsException: 8192 解决方案【转】
错误信息: 2017-1-17 10:09:39 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() ...
- java.lang.UnsupportedClassVersionError: xxx/xxxClass : Unsupported major.minor version 51.0【转】
以下小段参考自overflow: Unsupported major.minor version 52.0 [duplicate] 或csdn也有提及 : http://blog.csdn.net/p ...
- 词典的实现(4)-使用Hash方式来实现词典
1,实现思路 public class HashedDictionary<K, V> implements DictionaryInterface<K, V>, Seriali ...
- WinRar 压缩接压缩文件
windows WinRAR 定时压缩文件 命名当天时间 设置时间格式: set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" 指定 WinRAR ...
- 日期与时间控件QDate, QTime, QDateTime
QDate类用于处理公历日期.QTime类用于处理时间.QDateTime类将QDate对象和QTime对象整合为一个对象 QDate: from PyQt5.QtCore import QDate, ...
- JavaScript之Ajax(一)创建Ajax对象
// 支持浏览器的源码 function AjaxObject() { var AjaxRequest; // 缓存XHR对象便于 Ajax 使用 try { // Opera 8.0+, Firef ...
- H.264 SVC
视频厂商POLYCOM,VIDYO和RADVISION等都推出H.264 SVC技术.针对H.264 SVC技术做个介绍. CISCO和POLYCOM都提供了免版税的H.264 SVC的版本. 其中o ...
- spring boot + es
用Elasticsearch构建电商搜索平台 refs: http://www.sojson.com/blog/176.html
- linux笔记_day04
1.cat 连接并显示 -n 显示行号 -E END 显示行尾 2.tac 从后往前显示 3.ctrl +C 4.more 向后翻 到最后会退出 5.less 翻到最后不退出 常用 支持b k sp ...