UIGestureRecognizer

UIGestureRecognizer

1.是什么?

专门用来处理手势识别的类.

2.有什么用?

这是一个抽象类.通过其具体子类可以处理手势识别,

具体子类.

UITapGestureRecognizer//轻拍

UIPinchGestureRecognizer//缩放

UIRotationGestureRecognizer//旋转

UISwipeGestureRecognizer//轻扫

UIPanGestureRecognizer//拖拽

UIScreenEdgePanGestureRecognizer//轻拍屏幕边缘

UILongPressGestureRecognizer//长按

3.怎么用?

>1.创建.

>2.添加给需要进行手势识别的视图:addGestureRecognizer

>3.添加识别后处理的方法

例.

实现代码:

   UIRotationGestureRecognizer *rotatetion = [[UIRotationGestureRecognizer alloc]init];

    [self.pinkView addGestureRecognizer:rotatetion];

    [rotatetion addTarget:self action:@selector(rotationPinkView:)];
- (void)rotationPinkView:(UIRotationGestureRecognizer *)rotation
{

    self.pinkView.transform = CGAffineTransformMakeRotation(rotation.rotation);
}

其他的几个手势处理的类的用法格式上是一致的,此处不赘述.

4.UIGestureRecognizer的代理方法.

>1.同时识别多个手势操作.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

说是同时,但是单位时间还是只能处理一个手势,只不过只要此处返回YES,比如一边旋转一边缩放,旋转完成后,松手,缩放同样有效.

>2.是否允许接收触摸对象,就是是否允许视图对手势做出反应.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

返回NO,不识别手势操作.

5.注意:

>1.有一个需要注意的地方:当使用旋转的时候,如果用rotate,将当前的transform传递进去,会越转越快.因为roation属性是旋转角度,比如第一次旋转10,被旋转视图停留在10度的位置,再次旋转,如果在当前基础上旋转10,也就是相当于初始位置旋转了20,就是说,调用对应的手势识别方法时,会在10度的基础上再次旋转20,也就是说你手指虽然旋转了20,但是被旋转视图实际上旋转了30.

6.什么时候用?

UIResponder的touch系列方法也可以处理屏幕的手势,touches系列方法由UIResponder提供,只有继承自UIResponder的类才识别手势,UIView继承自UIResponder,所有的UI控件都继承自UIView,因而所有的控件都具有touches系列方法.

但是有一个致命弱点,touches系列方法只能监听触摸对象在视图上的位置,而无法识别触摸的状态-----轻重缓急,从左到右等方向,等等手势操作,UIGestureRecognizer刚好可以弥补这一点.因此,需要识别手势的状态是可以使用UIGestureRecognizer来处理.

 

转载于:https://www.cnblogs.com/yufang/p/5225828.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Swift 中,如果有多个滑动手势,它们可能会产生冲突。例如,如果你在一个视图中同时添加了一个左滑手势和一个右滑手势,当用户向左或向右滑动时,系统无法确定应该响应哪个手势。 为了解决这个问题,你可以使用UIGestureRecognizerDelegate协议来管理手势之间的冲突。下面是一些你可以使用的方法: 1. shouldRecognizeSimultaneouslyWith:这个方法可以允许两个手势同时识别,从而避免冲突。你可以在你的手势识别器的委托方法中实现它,例如: ```swift func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } ``` 2. shouldRequireFailure:这个方法可以让一个手势等待另一个手势失败之后再触发。例如,如果你想让一个长按手势等待一个短按手势失败之后再触发,可以这样写: ```swift func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool { if gestureRecognizer is UILongPressGestureRecognizer && otherGestureRecognizer is UITapGestureRecognizer { return true } return false } ``` 3. shouldReceive:这个方法可以让你决定是否应该响应手势。例如,如果你想让一个视图在用户使用两个手指拖动时响应手势,可以这样写: ```swift func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { if gestureRecognizer is UIPanGestureRecognizer && touch.view == myView { return touch.numberOfTouches == 2 } return true } ``` 通过实现上述方法,你可以很好地处理多个滑动手势之间的冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值