UIGestureRecognizer(手势识别)在iOS 中非常重要,他极大地提高了移动设备的使用便捷性;

在3.2之前是主要使用的是由UIResponder而来的如下4种方式:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

但是由于这种方式需要自己计算做不同的手势分辨,实在麻烦。

在3.2 以后,提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作。

1、拍击——UITapGestureRecognizer

2、向里或向外捏——UIPinchGestureRecognizer

3、摇动或者拖拽——UIPanGestureRecognizer

4、擦碰——UISwipeGestureRecognizer

5、旋转——UIRotationGestureRecognizer 

6、长按——UILongPressGestureRecognizer 

每个手势识别器的用法都差不多,以UITapGestureRecognizer为例:

     //创建手势识别器对象并监听手势的触发
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
//连续敲击次数
tap.numberOfTapsRequired = ;
//需要两根手指一起敲击
tap.numberOfTouchesRequired = ;
//添加手势到指定的view上
[self.view addGestureRecognizer:tap];

敲击实例:

1、UITapGestureRecognizer 拍击

 //创建手势识别器对象并监听手势的触发
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
//连续敲击次数
tap.numberOfTapsRequired = ;
//需要两根手指一起敲击
tap.numberOfTouchesRequired = ;
//添加手势到指定的view上
[self.view addGestureRecognizer:tap]; - (void)tapAction:(UITapGestureRecognizer*)tapGesture{ NSLog(@"我敲击了屏幕"); CGPoint point = [tapGesture locationInView:self.view];
NSLog(@"tapAction:%f,%f",point.x,point.y);
}

输出:

2、UIPinchGestureRecognizer  向里或向外捏

     UIPinchGestureRecognizer *Pinch =[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(PinchAction:)];
Pinch.delegate = self;
[imageView addGestureRecognizer:Pinch]; - (void)PinchAction:(UIPinchGestureRecognizer*)pinchGesture{
pinchGesture.view.transform = CGAffineTransformScale(pinchGesture.view.transform, pinchGesture.scale, pinchGesture.scale);
pinchGesture.scale = ;
}

3、UIPanGestureRecognizer  摇动或者拖拽


//先放置一张图片实施拖拽

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"u=3971024035,4095552302&fm=21&gp=0"]];

    [imageView setFrame:(CGRect){50,50,100,100}];

    [self.view addSubview:imageView];


    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
pan.delegate = self;
[self.view addGestureRecognizer:pan]; //设置触发拖拽的最少触摸点,默认为1
pan.minimumNumberOfTouches = ;
//设置触发拖拽的最多触摸点
pan.maximumNumberOfTouches = ; - (void)panAction:(UIPanGestureRecognizer *)panGesture{
CGPoint point = [panGesture locationInView:self.view]; NSLog(@"panAction:(%f, %f)",point.x, point.y);
imageView.center = point; if (panGesture.state==UIGestureRecognizerStateBegan) {
NSLog(@"panAction StateBegan:(%f,%f)", point.x, point.y);
} if (panGesture.state==UIGestureRecognizerStateChanged) {
NSLog(@"panAction StateChanged:(%f,%f)", point.x, point.y);
} if (panGesture.state==UIGestureRecognizerStateEnded) {
NSLog(@"panAction StateEnded:(%f,%f)", point.x, point.y);
} }

输出:

4、UISwipeGestureRecognizer  擦碰

     UISwipeGestureRecognizer *leftSwipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeAction:)];
[self.view addGestureRecognizer:leftSwipeGesture];
leftSwipeGesture.direction = UISwipeGestureRecognizerDirectionLeft; UISwipeGestureRecognizer *rightSwipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeAction:)];
[self.view addGestureRecognizer:rightSwipeGesture];
rightSwipeGesture.direction = UISwipeGestureRecognizerDirectionRight; - (void)SwipeAction:(UISwipeGestureRecognizer*)swipeGesture{
if (swipeGesture.direction==UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"swipeGesture:Left");
}
if (swipeGesture.direction==UISwipeGestureRecognizerDirectionRight) {
NSLog(@"swipeGesture:Right");
}
}

输出:

5、UIRotationGestureRecognizer  旋转

 UIRotationGestureRecognizer *rotations = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];
rotations.delegate = self;
rotation = ;
[self.view addGestureRecognizer:rotations]; - (void)rotationAction:(UIRotationGestureRecognizer*)rotationGesture{
imageView.transform = CGAffineTransformMakeRotation(rotation+rotationGesture.rotation); if (rotationGesture.state==UIGestureRecognizerStateEnded) {
rotation += rotationGesture.rotation;
} }

6、UILongPressGestureRecognizer  长按

     UILongPressGestureRecognizer *longp = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longAction:)];
[self.view addGestureRecognizer:longp]; longp.numberOfTouchesRequired = ;
//长按时间为2秒
longp.minimumPressDuration = ;
//允许15秒中运动
longp.allowableMovement = ; - (void)longAction:(UILongPressGestureRecognizer *)longPress{
CGPoint point = [longPress locationInView:self.view];
imageView.center = point; if(longPress.state == UIGestureRecognizerStateBegan){
NSLog(@"longAction StateBegan: (%f, %f)", point.x, point.y);
} if(longPress.state == UIGestureRecognizerStateEnded){
NSLog(@"longAction StateEnded: (%f, %f)", point.x, point.y);
}
}

输出:

iOS基础篇(十七)——UIGestureRecognizer用法的更多相关文章

  1. ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别

    一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能. ...

  2. ios基础篇(十四)——UITableView(二)属性及基本用法

    上一篇说了UITableView的重用机制,让我们对UITableView有了简单了解,下面说说UITableView的属性及常见方法. 一.属性 1.frame:设置控件的尺寸和大小 2.backg ...

  3. ios基础篇(二十七)—— Json解析

    一.什么是Json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使 ...

  4. iOS基础篇(十五)——UIScrollView的基本用法

    滚动视图(UIScrollView)通常用于显示内容尺寸大于屏幕尺寸的视图. 一.基本属性 1.CGSize contentSize :设置UIScrollView的滚动范围 2.CGPoint co ...

  5. ios基础篇(七)——UISwich、UISlider、UIProgressView的用法总结

    一.UISlider UIslider滑块控件在IOS开发中会常用到,可用于调节音量,字体大小等UI方面的交互:UISlider实例提供一个控件,让用户通过左右拖动一个滑块(可称其为“缩略图”)来选择 ...

  6. ios基础篇(二)——UIImageView的常见用法

    UIImageView是在界面上显示图片的一个控件,在UIImageView中显示图片的话应该首先把图片加载到UIImage中,然后通过其他方式使用该UIImage. 创建UIImageView有两种 ...

  7. ios基础篇(一)——UIView控件基本属性与常见用法

    1.frame 控件的位置和尺寸(以父控件的左上角为坐标原点(0,0)) 2.center 控件的中点(以父控件的左上角为坐标原点) 3.bounds 控件的位置和尺寸(以自己的左上角为坐标原点(0, ...

  8. ios基础篇(十六)——UIWebView的基本使用

    UIWebView是内置的浏览器控件,可以用它来浏览网页.打开文档等.UIWebView是一个混合体,具体的功能控件内置的,实现一些基本的功能.UIWebView可以查看Html网页,pdf文件,do ...

  9. ios基础篇(二十九)—— 多线程(Thread、Cocoa operations和GCD)

    一.进程与线程 1.进程 进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内: 如果我们把CPU比作一个工厂,那么进程就好比工厂的车间,一个工厂有 ...

随机推荐

  1. VS2012+Win7网站发布详细步骤

    VS2012+Win7网站发布详细步骤 本机环境: 本文分三个部分介绍Web项目发布的常规方法,大神级别可以略过,主要是为了方便一些初学者. 第一部分:VS2012把项目发布到文件系统. 第二部分:I ...

  2. 安装django

    我已经有Python3.5的环境了.我们去下载Django.https://github.com/django/django.git  直接下载为zip解压即可. 然后在命令提示符下安装 1.  切换 ...

  3. 十分钟学会python

    1.raw_input的使用 从键盘读取信息,返回字符串. 例: hrs = raw_input("Enter Hours:")pay=raw_input("Enter ...

  4. 转: Oracle Form 中commit 与do_key('commit_form')区别

    1.commit_form针对form上面的数据变动进行commit,对于代码中的类似update,insert语句也进行提交:如果form上面的数据变动和代码中的数据变动有冲突,最后以界面上的为准. ...

  5. 关于silverlight打印模糊的问题

         今天做silverlight打印实现时,发现一个问题,就是sl打印处理的文字很模糊          这样肯定不行撒,于是开始找解决办法,首先想到的是silverlight中文显示的问题,好 ...

  6. WPF:基础知识

    WPF:1.数据驱动 2.UI定义与运行逻辑分离 一. 1.编译 /t:exe 命令行程序:/t:winexe 图形用户界面程序:/t:library 动态链接库 2.启动 1)编译后生成的App.g ...

  7. CentOS7安装Apache2.4+PHP5.6

    linux系统CentOS7 先下载Apache需要依赖的软件 1.APR 下载地址http://apr.apache.org/download.cgi wget下载路径http://mirror.b ...

  8. Object类型与Array类型

    总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...

  9. python: jquery实现全选 反选 取消

    引入这个jquery-1.12.4.js jquery实现全选 反选 取消 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...

  10. Script 语言的简单练习题 乘法口诀

    <script>for(var i=1;i<=9;i++){ for(var k=1;k<=i;k++) { document.write(k+"x"+i+ ...