iOS实现手势识别

    手势其实是一组触摸事件的组合,一个最明显的手势例子就是 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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值