iOS触摸简介和简单实现
1、触摸:
代表着iOS用户交互的核心,它为用户与应用程序的交互提供了最重要的方式。触摸不只限于按钮触摸和键盘交互,可以设计和构建直接通过轻击或其他手势进行工作的应用程序。应用程序在试图类中接收、处理并响应触摸事件。
2、为什么是在视图类UIView中处理触摸事件而不是视图控制器UIViewController?
答:因为视图控制器可以拥有多个视图,所有视图都可能不同程度的使用触摸,如果视图控制器直接处理所有触摸,其响应例程必须为每个视图选择适当的响应。这样一来,代码很快会变得复杂。而将该编程保持在视图级别可简化每个实现。另外,通过视图级别的编程,可以创建完全独立的定制用户界面。
3、触摸事件传达的信息包括:
触摸发生的位置(当前位置和最近的历史位置)
触摸的阶段(触摸按下、触摸移动、触摸弹起)
触摸轻击数量(单击、双击)
触摸发生的时间(时间戳)
4、UITouch对象
触摸事件及其信息存储在UITouch对象中。当用户触摸屏幕后,就会产生相应的事件,所有相关的UITouch对象都被包装在事件中,被程序交由特定的对象来处理。
4.1、UITouch类中包含5个属性:
window:触摸产生时所处的窗口。
view:触摸产生时所处的视图。
tapCount:轻击(Tap)操作和鼠标的单击操作类似,tapCount表示短时间内轻击屏幕的次数。因此可以根据tapCount判断单击、双击或更多的轻击。
timestamp:时间戳记录了触摸事件产生或变化时的时间。单位是秒。
phase:触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。而通过phase可以查看当前触摸事件在一个周期中所处的状态。
phase是一个枚举,包含如下信息:
UITouchPhaseBegan, // whenever a finger touches thesurface.
UITouchPhaseMoved, //whenever a finger moves on the surface.
UITouchPhaseStationary, //whenever a finger is touching the surface but hasn't moved since the previousevent.
UITouchPhaseEnded, //whenever a finger leaves the surface.
UITouchPhaseCancelled, //whenever a touch doesn't end but we need to stop tracking (e.g. putting deviceto face)
4.2、UITouch类中包含如下成员函数:
- (CGPoint)locationInView:(UIView *)view:函数返回一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。
- (CGPoint)previousLocationInView:(UIView *)view:该方法记录了前一个坐标值,函数返回也是一个CGPoint类型的值, 表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。
当手指接触到屏幕,不管是单点触摸还是多点触摸,事件都会开始,直到用户所有的手指都离开屏幕。期间所有的UITouch对象都被包含在UIEvent事件对象中,由程序分发给处理者。事件记录了这个周期中所有触摸对象状态的变化。
只要屏幕被触摸,系统就会报若干个触摸的信息封装到UIEvent对象中发送给程序,由管理程序UIApplication对象将事件分发。一般来说,事件将被发给主窗口,然后传给第一响应者对象(FirstResponder)处理。
5、简单实现
很简单的一个视图,视图中有一个可以拖动的按钮。
工程源码路径如下:
http://download.csdn.net/detail/jjunjoe/5056882