您的位置:首页 > 产品设计 > UI/UE

iOS触摸手势知识介绍(UITouch & UIGestureRecognizer)

2016-05-16 14:25 316 查看
1、触摸:代表着iOS用户交互的核心,它为用户与应用程序的交互提供了最重要的方式。触摸不只限于按钮触摸和键盘交互,可以设计和构建直接通过轻击或其他手势进行工作的应用程序。应用程序在试图类中接收、处理并响应触摸事件。

2、为什么是在视图类UIView中处理触摸事件而不是视图控制器UIViewController?

答:因为视图控制器可以拥有多个视图,所有视图都可能不同程度的使用触摸,如果视图控制器直接处理所有触摸,其响应例程必须为每个视图选择适当的响应。这样一来,代码很快会变得复杂。而将该编程保持在视图级别可简化每个实现。另外,通过视图级别的编程,可以创建完全独立的定制用户界面。

3、触摸事件传达的信息包括:

3-1 触摸发生的位置(当前位置和最近的历史位置)

3-2 触摸的阶段(触摸按下、触摸移动、触摸弹起)

3-3 触摸轻击数量(单击、双击)

3-4 触摸发生的时间(时间戳)

4、UITouch对象:触摸事件及其信息存储在UITouch对象中。当用户触摸屏幕后,就会产生相应的事件,所有相关的UITouch对象都被包装在事件中,被程序交由特定的对象来处理。

4-1 UITouch类中包含5个属性:

4-1-1 window:触摸产生时所处的窗口。

4-1-2 view:触摸产生时所处的视图。

4-1-3 tapCount:轻击(Tap)操作和鼠标的单击操作类似,tapCount表示短时间内轻击屏幕的次数。因此可以根据tapCount判断单击、双击或更多的轻击。

4-1-4 timestamp:时间戳记录了触摸事件产生或变化时的时间。单位是秒。

4-1-5 phase:触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。而通过phase可以查看当前触摸事件在一个周期中所处的状态。

phase是一个枚举,包含如下信息:

4-1-5-1 UITouchPhaseBegan, // 手指触动

4-1-5-1 UITouchPhaseMoved, // 手指表面上移动

4-1-5-1 UITouchPhaseStationary, // 手指触摸表面但previousevent以来还没有搬

4-1-5-1 UITouchPhaseEnded, // 手指离开水面

4-1-5-1 UITouchPhaseCancelled, //触摸不结束但我们需要停止跟踪(例如把deviceto脸)

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、除了用 touchesBegan / touchesMoved / touchesEnded这组方法来控制使用者的手指触控外,也可以用

UIGestureRecognizer 的衍生类別来进行判断。

用 UIGestureRecognizer的好处在于有现成的手势,开发者不用自己计算手指移动轨迹。

5-1、UIGestureRecognizer的衍生类別有以下几种:

5-1-1 UITapGestureRecognizer //点击

5-1-2 UIPinchGestureRecognizer //拿捏,二指往內或往外拨动,平时经常用到的缩放

5-1-3 UIRotationGestureRecognizer //旋转

5-1-4 UISwipeGestureRecognizer //滑动,快速移动

5-1-5 UIPanGestureRecognizer //拖动,慢速移动

5-1-6 UILongPressGestureRecognizer //长按

从命名上不难了解这些类別所对应代表的手势,分別是 Tap(点一下)、Pinch(二指往內或往外拨动)、Rotation(旋转)、Swipe(滑动,快速移动)、Pan(拖移,慢速移动)以及
LongPress(长按)。

5-2、这些手势別在使用上也很简单,只要在使用前定义并添加到对应的视图上即可。

步骤1
创建手势实例。当创建手势时,指定一个回调方法,当手势开始,改变、或结束时,回调方法被调用。

步骤2
添加到需要识别的View中。每个手势只对应一个View,当屏幕触摸在View的边界内时,如果手势和预定的一样,那就会回调方法。

注意:一个手势只能对应一个View,但是一个View可以有多个手势
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: