首页 理论教育 如何使用iOS手势识别器?

如何使用iOS手势识别器?

时间:2023-06-23 理论教育 版权反馈
【摘要】:当手指移动时,手势的状态会变成UIGestureRecognizer.State.changed;当手指抬起时,手势结束。3.UIRotationGestureRecognizer一个用于判断两根手指触摸旋转手势的识别器。滑动是个不连续的手势,因此每个手势仅返送一次相关的动作消息。6.UIScreenEdgePanGestureRecognizer一个用于判断手指在屏幕边缘开始进行平移手势的识别器。7.UILongPressGestureRecognizer一个用于判断手指长按手势的识别器。触摸时,用户的手指移动不能超过指定的距离;如果超出指定距离,则手势识别失败。

如何使用iOS手势识别器?

UIGestureRecognizer手势识别器,是UIKit提供的用于识别手势的类,它是能够用于识别触摸序列(或其他输入)并映射到相应手势上的一系列类的基类。当这些实例识别出相应的手势时,会向指定的目标发送消息,也是一个action-target的模式。

UIGestureRecognizer的子类如下:

1.UITapGestureRecognizer

一个用于判断单击或者多次点击的识别器。对于要识别的手势,必须是特定手指数量和特定的点击次数才能识别,虽然每次点击都是不连续手势,但它们分散在手势识别器的不同状态中。当手势开始时,系统会发送相关的动作消息,并且在中间过程不断地发送手势最新状态的消息,直到手势结束为止。因此,在相应手势的事件中需要检查当前手势的状态。在处理手势的代码中可以通过调用如下方法:

这个方法可以获取手势在特定视图中的位置。如果有多个点击,这个位置会是第一个点击的位置;如果有多根手指触摸,那么这个位置会是所有手指触摸点的质心。我们还可以通过调用如下方法去获取点击中某个触摸的位置:

如果允许多次点击,那么返回第一次点击的位置。

2.UIPinchGestureRecognizer

一个用于判断两根手指触摸捏合手势的识别器。当用户将两根手指朝向彼此移动时,传统意义是缩小;当用户将两根手指彼此远离时,传统意义是放大。捏合是一种连续的手势,需要两根手指同时触摸屏幕,并且移动一定的距离直到被识别为止。当手指移动时,手势的状态会变成UIGestureRecognizer.State.changed;当手指抬起时,手势结束。

3.UIRotationGestureRecognizer

一个用于判断两根手指触摸旋转手势的识别器。当用户以圆周运动彼此相对地移动手指时,下面的视图应该以相应的方向和速度旋转。它和捏合很像,也是一种连续的手势。它开始于两根手指同时触摸屏幕,并且移动一定的距离直到被识别为止。当手指移动时,手势的状态会改变;当手指抬起时,手势结束。

4.UISwipeGestureRecognizer

一个用于判断手指向一个或多个方向滑动手势的识别器。滑动是个不连续的手势,因此每个手势仅返送一次相关的动作消息。当指定次数(numberOfTouchesRequired属性)的触摸在允许的方向上产生足够大的移动之后被视为滑动。滑动可以很慢也可以很快,一个慢速的滑动需要精准的方向但是只要移动一段小距离,而一个快速的滑动需要移动一段大距离但是方向不一定精准。

5.UIPanGestureRecognizer

一个用于判断手指平移(拖动)手势的识别器。用户必须有一根以上的手指按在屏幕上,通过这个手势处理动作消息,可以获取到当前手势的速度和平移。平移是一种连续的手势,即当指定的触摸数(minimumNumberOfTouches)移动到足以被视为平移时。在处理动作消息时,可以通过调用如下方法获取平移:(www.xing528.com)

x和y值报告随时间的总平移,而不是上次报告平移时与此次报告之间的变化值。建议在首次识别之后将平移值应用到视图状态上,不要每次将这个方法的返回值连接起来。如果需要获取速度,则可以调用如下方法获取平移手势在指定视图的坐标系中的速度:

x和y值报告随时间的总平移,而不是上次报告平移时与此次报告之间的变化值。建议在首次识别之后将平移值应用到视图状态上,不要每次将这个方法的返回值连接起来。如果需要获取速度,则可以调用如下方法获取平移手势在指定视图的坐标系中的速度:

我们可以指定应用于平移和速度值的坐标系,也可以将平移设置为期望值。

6.UIScreenEdgePanGestureRecognizer

一个用于判断手指在屏幕边缘开始进行平移手势的识别器。在某些情况下,系统使用屏幕边缘手势来启动视图控制器的转换,我们可以使用此类为自己的操作复制相同的手势行为。创建屏幕边缘平移手势识别器后,在将手势识别器附加到视图之前需要为自身edge属性指定适当的值,我们可以使用此属性指定手势可以从哪些边缘开始。此手势识别器只识别第一次触摸,之后的任何触摸将被忽略。

7.UILongPressGestureRecognizer

一个用于判断手指长按手势的识别器。用户必须在视图上按一根或多根手指,并在动作事件触发前将其保持在某个位置上至少一段时间。触摸时,用户的手指移动不能超过指定的距离;如果超出指定距离,则手势识别失败。长按手势是连续的,当指定时间段(minimum PressDuration属性)、按下允许的手指数量(numberOfTouchesRequired属性)并且触摸不超出允许的移动范围(allowableMovement属性)时,手势开始。每当手指移动时,手势识别器转换到改变状态,并且当任何手指被抬起时,手势结束。

我们可以指定应用于平移和速度值的坐标系,也可以将平移设置为期望值。

6.UIScreenEdgePanGestureRecognizer

一个用于判断手指在屏幕边缘开始进行平移手势的识别器。在某些情况下,系统使用屏幕边缘手势来启动视图控制器的转换,我们可以使用此类为自己的操作复制相同的手势行为。创建屏幕边缘平移手势识别器后,在将手势识别器附加到视图之前需要为自身edge属性指定适当的值,我们可以使用此属性指定手势可以从哪些边缘开始。此手势识别器只识别第一次触摸,之后的任何触摸将被忽略。

7.UILongPressGestureRecognizer

一个用于判断手指长按手势的识别器。用户必须在视图上按一根或多根手指,并在动作事件触发前将其保持在某个位置上至少一段时间。触摸时,用户的手指移动不能超过指定的距离;如果超出指定距离,则手势识别失败。长按手势是连续的,当指定时间段(minimum PressDuration属性)、按下允许的手指数量(numberOfTouchesRequired属性)并且触摸不超出允许的移动范围(allowableMovement属性)时,手势开始。每当手指移动时,手势识别器转换到改变状态,并且当任何手指被抬起时,手势结束。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈