1. 触摸
触摸(Cocoa Touch)就是用户手指放在屏幕上一直到手指离开。触摸是在UIView上进行的。当用户触摸到屏幕时,触模事件就会发生。本节将主要讲解触摸的阶段以及这些阶段所对应的的方法。
1.1 触摸阶段
当用户的手指放在屏幕上就实现了触摸,但是触摸并不是一直持续的。当手指离开屏幕这一次触摸就结束了。这一次触摸共分为5个阶段。如下表所示:
触摸的5个阶段
触摸阶段 | 功能 |
UITouchPhaseBegan | 手指刚触摸到屏幕 |
UITouchPhaseMoved | 手指在屏幕上移动 |
UITouchPhaseStationary | 手指在屏幕上没有移动 |
UITouchPhaseEnded | 手指离开触摸的屏幕 |
UITouchPhaseCancelled | 由于某些原因,造成触摸终止 |
注意:不是只有某一次触摸事件才会有这5咯阶段,而是每一次触摸事件都会有这5个事件。
1.2 触摸方法
对于这5咯触摸的阶段,该如何实现呢?在UIResponder类中,对应着5个阶段给出了方法,如下表所示:
触摸方法
触摸阶段 | 方法 |
UITouchPhaseBegan | -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event; |
UITouchPhaseMoved | -(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event; |
UITouchPhaseStationary | 无 |
UITouchPhaseEnded | -(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event; |
UITouchPhaseCancelled | -(void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event; |
【示例 - 手指触摸到屏幕时,触摸的地方会出现彩色小圆。手指在屏幕上移动,小圆变成正方形】
2 手势
通过触摸可以实现各种各样的手势,例如轻拍、捏、旋转等。在iOS中,常用到的手势被封装到一个UIGestureRecognizer类中。一个手势就对应一个手势识别器。本节将主要讲解iOS中常用手势以及它对应的手势识别器。
2.1 轻拍
轻拍手势一般使用UITapGestureRecognizer手势识别器进行识别。要使用UITapGestureRecognizer手势识别器,就要对其创建。创建方式有两种:一种是使用静态创建方式,一种是使用动态创建方式。一下主要讲解这两个创建方式。
1> 静态创建UITapGestureRecognizer手势识别器,需要在创建的项目中打开Main.storyboard文件,从试图库中找到Tap Gesture Recognizer手势识别器,拖动到设计界面上。这是会在设计界面的Dock工作区中出现添加的手势识别器,如下如所示:
注意;静态创建的轻拍手势识别器的这种方式也适合其他手势识别器的创建。由于静态创建方式都一样,所以在将其他手势识别IQ的创建时只讲动态 创建的方式。
2> 动态创建,initWithTarget:action:方法的功能是创建初始化一个UITapGestureReconizer对象,其语法形式如下:
-(id)initwithTarget:(id)target action:(SEL)action:;
其中(id)target用来指定一个目的对象;(SEL)action用来指定动作。
【示例 - 轻拍手势识别器】
2.2 捏
所谓捏,就是使用两个手指自里向外张合从而实现图片的放大和缩小。UIPinchGestureRecognizer手势识别器可以识别捏的手势。要动态创建,就是使用initWith:action:方法创建初始化一个UIPinchGestureRecognizer手势识别器对象。
【示例 - 捏手势识别器】
注意:如果要在虚拟机上实现捏手势,就要按住Ctrl+Alt键,这是iOS模拟器上会出现两个小圆,它们就代表了两个手指。
2.3 滑动
滑动的手势可以使用UISwipeGestureRecognizer手势识别器进行识别。
【示例 - 滑动手势识别器】
2.4 旋转
旋转的手势可以使用UIRotationGestureRecognizer手势识别器进行识别。
【示例 - 旋转手势识别器】
2.5 移动
移动的手势可以使用UIPanGestureRecognizer手势识别器进行识别。
【示例 - 移动手势识别器】
2.6 长按
长按的手势可以使用UILongPressGestureRecognizer手势识别器进行识别。
【示例 - 长按手势识别器】
2.7 自定义手势