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