IOS中的手势识别

  最近做项目需要用到手势识别,所以花了点时间去学习了一下,其实手势识别这部分的内容不多,还是很容易上手的。

  IOS中的手势一共有六种 :tap(点击),longPress(长按),swipe(挥动),pan(拖动),pich(缩放),rotation(旋转)。这六个手势类都是继承自UIGestureRecongnizer,所以,先来看看UIGestureRecongnizer这个类。

  UIGestureRecongizer继承自NSObject,是以上六种手势的父类,定义了一些所有手势公用的属性和方法,下面条一些比较常用的。

初始化方法:

- (instancetype)initWithTarget:(nullable id)target action:(nullable SEL)action NS_DESIGNATED_INITIALIZER; // designated initializer
- (void)addTarget:(id)target action:(SEL)action;   // add a target/action pair. you can call this multiple times to specify multiple target/actions
- (void)removeTarget:(nullable id)target action:(nullable SEL)action;

- (CGPoint)locationInView:(nullable UIView*)view;                                // a generic single-point location for the gesture. usually the centroid of the touches involved
- (NSUInteger)numberOfTouches;                                          // number of touches involved for which locations can be queried
- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(nullable UIView*)view; // the location of a particular touch

以上的方法都比较容易理解,看方法名就知道是什么意思了,值得一提的是代理方法:

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

和实例方法:- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;

这两个方法是用于当两个手势冲突时(比如同事添加swipe和pan时)解决冲突的。首先实现以上代理方法,返回YES,然后调用requireGestureRecognizerToFail:方法如下:

[pan requireGestureRecognizerToFail:swipe];

这样当pan和swipe手势冲突时,会优先执行swipe手势,只有在swipe手势识别失败后才会执行pan手势。

属性:

@property(nonatomic,readonly) UIGestureRecognizerState state;//定义了该手势当前状态,是开始,结束,还是失败等等。

@property(nullable, nonatomic,readonly) UIView *view;//该手势的父视图

tap点击手势:UITapGestureRecognizer

最简单的手势,只有两个属性

@property (nonatomic) NSUInteger  numberOfTapsRequired;//需要点击下才会响应

@property (nonatomic) NSUInteger  numberOfTouchesRequired;//需要几个点才回响应

longPress长按手势:UILongPressGestureRecognizer

@property (nonatomic) NSUInteger numberOfTouchesRequired //需要多少个点按着
@property (nonatomic) CFTimeInterval minimumPressDuration; //需要按多久
@property (nonatomic) CGFloat allowableMovement;//按的时候手指的移动范围

swipe挥动手势 UISwipeGestureRecognizer

初始化一个UISwipeGestureRecognizer手势后,要先设置它的direction属性,设定它的方向。一个swipe手势智能响应一个方向,如果需要多个方向的挥动动作,那么久需要添加多个swipe手势。

@property(nonatomic) UISwipeGestureRecognizerDirection direction;//方向

@property(nonatomic) NSUInteger numberOfTouchesRequired //需要几个点才回响应

pan拖动手势 UIPanGestureRecognizer

- (CGPoint)translationInView:(nullable UIView *)view; // 手指在视图上移动的位置
- (void)setTranslation:(CGPoint)translation inView:(nullable UIView *)view;// 设置手指在视图上移动的位置
- (CGPoint)velocityInView:(nullable UIView *)view;  // 手指在视图上移动的速率

pinch缩放手势 UIPinchGestureRecognizer

@property (nonatomic)   CGFloat scale; // 缩放后的比例
@property (nonatomic,readonly) CGFloat velocity;  // 缩放的速率

rotation旋转手势 UIRotationGestureRecognizer

@property (nonatomic)  CGFloat rotation; // rotation in radians 旋转的弧度
@property (nonatomic,readonly) CGFloat velocity;  // 旋转的速率(弧度/秒)

时间: 2024-10-21 01:36:32

IOS中的手势识别的相关文章

iOS中的手势识别的积累:UIGestureRecognizer

#import "RootViewController.h" #import "UIColor+MyUIColor.h" @interface RootViewController () @end @implementation RootViewController /* UITapGestureRecognizer是轻拍?手势识别器,能识别轻拍操作 UILongPressGestureRecognizer是?长按?手势识别器,能识别?长按操作. UIRotatio

iOS中的触摸事件,手势识别,摇晃事件等

在iOS中,事件可以划分为以下几类: 1.触摸事件:通过触摸,手势进行触发(手指点击.缩放等) 2.运动事件:通过加速器触发(例如手机晃动) 3.远程控制事件:通过其他远程设备触发(例如耳机控制按钮) 在iOS中并不是所有的类都能处理接收并事件,只有继承自UIResponder类的对象才能处理事件(如我们常用的UIView. UIViewController.UIApplication都继承自UIResponder,它们都能接收并处理事件).在UIResponder中 定义了上面三类事件相关的处

iOS开发之手势识别汇总

iOS开发之手势识别汇总 iOS开发中手势识别有六种: 轻击手势(TapGestureRecognizer), 轻扫手势 (SwipeGestureRecognizer), 长按手势(LongPressGestureRecognizer), 拖动手势(PanGestureRecognizer), 捏合手势(PinchGestureRecognizer), 旋转手势(RotationGestureRecognizer), 1,轻击手势(TapGestureRecognizer) UITapGest

iOS开发笔记--iOS中的触摸事件和手势处理

iOS中的事件可以分为三大类:原文:http://my.oschina.net/aofe/blog/268749 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象". UIApplication,UIViewController,UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. UIRespon

iOS中的触摸事件

1.响应者对象 iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”. UIApplication.UIViewController.UIView都继承自UIResponder,因此他们都是响应者对象,都能够接收并处理事件. 2.UIResponde UIResponder内部提供了以下方法来处理事件 触摸事件: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)e

iOS中touches事件,addtarget ...action和GestureRecognizer详解

刚学完uiview,uicontrol类,许多人知道 touchesBegain,touchesMoved,touchesEnd,GestureRecognizer的用途,但仔细考虑这些事件之间的关系,却令人头疼. 现在以一个例子来分析它们的内部实现: - (void)viewDidLoad { UIButton * btn=[[UIButton alloc]initWithFrame:CGRectMake(20, 40, 50, 50)]; [self.view addSubview:btn]

iOS开发之手势识别

感觉有必要把iOS开发中的手势识别做一个小小的总结.在上一篇iOS开发之自定义表情键盘(组件封装与自动布局)博客中用到了一个轻击手势,就是在轻击TextView时从表情键盘回到系统键盘,在TextView中的手是用storyboard添加的.下面会先给出如何用storyboard给相应的控件添加手势,然后在用纯代码的方式给我们的控件添加手势,手势的用法比较简单.和button的用法类似,也是目标动作回调,话不多说,切入今天的正题.总共有六种手势识别:轻击手势(TapGestureRecogniz

说说iOS中的手势及触摸

一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会.当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方.事件将沿着响应者链一直向下传递,直到被接受并做出处理.一般来说,第一响应者是个视图对象或者其子类对

iOS中的触摸事件和手势处理

iOS中的事件可以分为三大类: 1> 触摸事件 2> 加速计事件 3> 远程控制事件 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象". UIApplication,UIViewController,UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件. UIResponder UIResponder内部提供了方法来处理事件; 1> 触摸事件 一