原创文章,欢迎转载。转载请注明:关东升的博客 php
应用与用户进行交互,依赖于各类各样的事件。事件响应者对象是能够响应事件并对其进行处理的对象,响应者链是由一系列连接在一块儿的响应者组成的。响应者链在事件处理中是很是重要的,响应者链能够把用户事件路由给正确的对象。 java
响应者对象与响应链编程
UIResponder是全部响应者对象的基类,它不只为事件处理,并且也为常见的响应者行为定义编程接口。UIApplication、UIView(及其子类,包括UIWindow)和UIViewController(及其子类)都直接或间接地继承自UIResponder类。微信
第一响应者是应用程序中当前负责接收触摸事件的响应者对象(一般是一个UIView对象)。UIWindow对象以消息的形式将事件发送给第一响应者,使其有机会首先处理事件。若是第一响应者没有进行处理,系统就将事件(经过消息)传递给响应者链中的下一个响应者,看看它是否能够进行处理。网站
响应者链是一系列连接在一块儿的响应者对象,它容许响应者对象将处理事件的责任传递给其余更高级别的对象。随着应用程序寻找可以处理事件的对象,事件就在响应者链中向上传递。响应者链由一系列“下一个响应者”组成。spa
1.第一响应者将事件传递给它的视图控制器(若是有的话),而后是它的父视图。.net
2.相似地,视图层次中的每一个后续视图都首先传递给它的视图控制器(若是有的话),而后是它的父视图。设计
3.最上层的容器视图将事件传递给UIWindow对象。code
4.UIWindow对象将事件传递给UIApplication单例对象。orm
触摸事件
触摸(UITouch)对象表示屏幕上的一个触摸事件,访问触摸是经过UIEvent对象传递给事件响应者对象的。触摸对象有时间和空间两方面。
1.时间方面
时间方面信息称为阶段(phase),表示触摸是否刚刚开始、是否正在移动或处于静止状态,以及什么时候结束,也就是手指什么时候从屏幕抬起。
在给定的触摸阶段中,若是发生新的触摸动做或已有的触摸动做发生变化,则应用程序就会发送这些消息。
当一个或多个手指触碰屏幕时,发送touchesBegan:withEvent:消息。
当一个或多个手指在屏幕上移动时,发送touchesMoved:withEvent:消息。
当一个或多个手指离开屏幕时,发送touchesEnded:withEvent:消息。
2.空间方面
触摸点对象还包括当前在视图或窗口中的位置信息,以及以前的位置信息(若是有的话)。下面的方法是能够得到触摸点所在窗口或视图中的位置。
func locationInView(_ view: UIView?) -> CGPoint
得到前一个触摸点所在窗口或视图中的位置信息:
func previousLocationInView(_ view: UIView?) -> CGPoint
欢迎关注关东升新浪微博@tony_ 关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php