手势其实是一组触摸事件的组合,一个最明显的手势例子就是 iOS 的图片浏览功能,用 户可以通过手势来对图片进行放大缩小通过两个手指的触摸。一些基础的手势触摸事件已经 封装好并添加到 iOS SDK 中来了。这些相关的类可以用来检测轻扫、捏合、拖拽、长按和 旋转等事件。
六种手势识别器如下:
Swipe
Rotation
Pinch
Pan
Long press
Tap
最基础的框架为了能够处理手势的动作必须要按照如下步骤来进行操作。
1. 创建一个合适的手势识别器的对象。
2. 把这个手势识别器的对象添加到到一个视图上,以接收手势。
3. 编写一个方法,当希望的手势发生时,会调用这个方法。
与手势相关的任何目标方法都必须遵循下面的规则:
•这个方法返回类型必须为 void。
•这个方法要么是无参数类型的,要么只能接受一个 UIGestureRecognizer 类型的参数
当系统调用这个方法时,会通过这个参数传递一个手势识别器过来
手势识别器一般可以分为两个大类,一个是单独的一个手势,一个是连贯的手势组合。 单独的顾名思义,就是一旦检测到手势事件发生,就调用相应的响应方法。连贯的就是一组 手势动作,当事件发生时会重复的调用目标对象中的方法,直到事件结束。
例如,双击事件,其实是一个单独的事件。虽然是有两个点击事件组成的,但是这个系 统的手势识别器还是把它当做一个事件来处理的,因为两次点击时间非常的相近。双击事件 发生之后会调用添加的双击事件的捕获方法。
一个很好的连续手势组的例子就是旋转,手势动作将会当用户开始旋转之后就开始了, 当用户的手离开了屏幕之后就停止了。这种类型的手势监听方法将会多次的运行。
可以使用 UIView 的实例方法 addGestureRecognizer:方法将手势识别器添加到 view中。 当需要时,可以通过 removeGestureRecognizer:方法将其从 view 中移除。
UIGestureRecognizer 类有一个名为 state 的属性,这个变量代表了不同状态的手势以便 手势识别器能够很好的进行辨别,单独的手势和连贯的手势识别器都有一组不同的状态值。
单独的手势识别器可以传递如下状态值。
1. UIGestureRecognizerState
2. UIGestureRecognizerState Recognized 3. UIGestureRecognizerState Failed
根据具体的情况,单独的手势识别器可能会将 UIGestureRecognizerState
一组连贯的手势组可以传递如下的状态值。
1. UIGestureRecognizerState Possible 2. UIGestureRecognizerState Began 3. UIGestureRecognizerState Changed 4. UIGestureRecognizerState Ended 5. UIGestureRecognizerState Failed
注意:当任意相关的手势识别到了在 view 上进行了触摸,手势识别器的状态都会被修 改为 UIGestureRecognizerState
如果连贯手势识别不能处理内部遇到的错误,将会以 UIGestureRecognizerState Failed 结 束,而不是 UIGestureRecognizerState Ended 。