《从零开始学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

 

欢迎关注关东升新浪微博@tony_关东升
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 


http://www.niftyadmin.cn/n/1036383.html

相关文章

【MySQL】数据库的事务和MySQL隔离级别分析

hello 大家好!今天来聊聊关于数据库事务的一些事情。说到事务,我相信大家应该都不陌生,多多少少也知道其中的一些事情。今天着重聊聊MySQL中事务的隔离级别。上车上车…… 文章目录一、什么是事务?二、MySQL中的事务和隔离级别1、…

《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言

原创文章,欢迎转载。转载请注明:关东升的博客在Swift语言出现之前,开发iOS或OS X应用主要使用Objective-C语言,此外还可以使用C和C语言,但是UI部分只能使用Objective-C语言。选择语言Swift语言出现后,苹果公…

《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-C API映射

原创文章,欢迎转载。转载请注明:关东升的博客Swift与Objective-C API映射在混合编程过程中Swift与Objective-C调用是双向的,由于不同语言对于相同API的表述是不同的,他们之间是有某种映射规律的,这种API映射规律主要体…

【算法题】LeetCode691、贴纸拼词(剪枝+记忆化搜索)

hello hello,好久不见。 今天我们来看一道算法题:LeetCode691 贴纸拼词。这是一道hard难度的题,还是很有难度的。 题意:给你一堆贴纸stickers,和一个英文单词。每一种贴纸都有无限张,并且每一张贴纸能剪切…

《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射

原创文章,欢迎转载。转载请注明:关东升的博客如果引入必要的头文件,在Objective-C语言中可以使用C数据类型。而在Swift语言中是不能直接使用C数据类型,苹果公司为Swift语言提供与C语言相对应数据类型。这些类型主要包括&#xff1…

【计网】(一) 集线器、网桥、交换机、路由器等概念

这篇文章将介绍计算机网络中的一些基础概念,以及生活中我们所常见的一些设备(交换机、路由器等)的作用。 目录✅ 互联网的概念✅ 什么是网络协议✅ 网络互联模型✅ 计算机之间是如何通信的🐾 网线直连🐾 同轴电缆(Coax…

关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部分,包括Swift语法篇、Cocoa T…

【计网】(二)MAC地址与IP地址

今天接着上篇文章继续讲计网的一些基础概念。 MAC地址 每个网卡都有一个6字节的MAC地址(Media Access Control Address),并且这个MAC地址时全球唯一的,固化在网卡的ROM中,由IEEE802标准规定的。 前3个字节&#xff1…