`

《从零开始学Swift》学习笔记(Day 68)——Cocoa Touch设计模式及应用之响应者链与触摸事件

阅读更多

原创文章,欢迎转载。转载请注明:关东升的博客 

 

应用与用户进行交互,依赖于各种各样的事件。事件响应者对象是可以响应事件并对其进行处理的对象,响应者链是由一系列链接在一起的响应者组成的。响应者链在事件处理中是非常重要的,响应者链可以把用户事件路由给正确的对象。 

 

响应者对象与响应链

 

UIResponder是所有响应者对象的基类,它不仅为事件处理,而且也为常见的响应者行为定义编程接口。UIApplicationUIView(及其子类,包括UIWindow)和UIViewController(及其子类)都直接或间接地继承自UIResponder类。

 

  

 第一响应者是应用程序中当前负责接收触摸事件的响应者对象(通常是一个UIView对象)。UIWindow对象以消息的形式将事件发送给第一响应者,使其有机会首先处理事件。如果第一响应者没有进行处理,系统就将事件(通过消息)传递给响应者链中的下一个响应者,看看它是否可以进行处理。

 

 响应者链是一系列链接在一起的响应者对象,它允许响应者对象将处理事件的责任传递给其他更高级别的对象。随着应用程序寻找能够处理事件的对象,事件就在响应者链中向上传递。响应者链由一系列“下一个响应者”组成。

 

 1.第一响应者将事件传递给它的视图控制器(如果有的话),然后是它的父视图。

 

 2.类似地,视图层次中的每个后续视图都首先传递给它的视图控制器(如果有的话),然后是它的父视图。

 

 3.最上层的容器视图将事件传递给UIWindow对象。

 

 4UIWindow对象将事件传递给UIApplication单例对象。 

 

触摸事件

 

触摸(UITouch)对象表示屏幕上的一个触摸事件,访问触摸是通过UIEvent对象传递给事件响应者对象的。触摸对象有时间和空间两方面。

 

1.时间方面

 

时间方面信息称为阶段(phase),表示触摸是否刚刚开始、是否正在移动或处于静止状态,以及何时结束,也就是手指何时从屏幕抬起。

 

在给定的触摸阶段中,如果发生新的触摸动作或已有的触摸动作发生变化,则应用程序就会发送这些消息。

 

  • 当一个或多个手指触碰屏幕时,发送touchesBegan:withEvent:消息。

  • 当一个或多个手指在屏幕上移动时,发送touchesMoved:withEvent:消息。

  • 当一个或多个手指离开屏幕时,发送touchesEnded:withEvent:消息。

     



      

     

     

    2.空间方面

    触摸点对象还包括当前在视图或窗口中的位置信息,以及之前的位置信息(如果有的话)。下面的方法是可以获得触摸点所在窗口或视图中的位置。

func locationInView(_ view: UIView?) -> CGPoint

 

 

获得前一个触摸点所在窗口或视图中的位置信息:

 

func previousLocationInView(_ view: UIView?) -> CGPoint

 

 

 

 

 

 

 

  • 大小: 48.4 KB
  • 大小: 33.8 KB
  • 大小: 20.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics