今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码:

// 初始化一个UIimageView
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 300, 300)];
imageView.image = [UIImage imageNamed:@"12.jpg"]; // UIImageView的用户交互是默认关闭的,要想使他可以处理触摸事件,我们得手动打开它
[imageView setUserInteractionEnabled:YES];
[self.window addSubview:imageView];
 //初始化一个视图(响应者)来承载手势
/*UIView *gestureView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
//当前视图放置到屏幕中央
gestureView.center = self.window.center;
gestureView.backgroundColor = [UIColor yellowColor];
[self.window addSubview:gestureView];

1、轻拍手势

//创建轻拍手势
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];

1.设置触控对象,和轻拍的次数

    //设置触控对象的个数(几个手指)
[tapGR setNumberOfTouchesRequired:1];
//设置轻拍次数
[tapGR setNumberOfTapsRequired:2];
//给创建好的视图添加手势
[gestureView addGestureRecognizer:tapGR];
//轻拍手势的回调方法
- (void)tapAction:(UITapGestureRecognizer*)sender{ //可以根据手势得到它当前所作用的视图
UIImageView *imageView = (UIImageView*)sender.view; //得到textfield viewWithTag此方法的返回值为UIView类型,但是UITextField为UIView的子类,父类对象不能直接指向子类对象,所以需要强制转换
UITextField *textField = (UITextField*)[self.window viewWithTag:1000];
//回收键盘,取消第一响应者
[textField resignFirstResponder];
NSLog(@"我轻拍了gestureView");
}

2、捏合手势

//创建捏合手势
UIPinchGestureRecognizer* pinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];
pinchGR.delegate = self; // 可以在同一个视图上实现多个手势
//捏合手势的回调方法
- (void)pinchAction:(UIPinchGestureRecognizer*)sender{ //通过捏合手势的到缩放比率
float scale = sender.scale;
//得到该手势所作用的视图
UIView *view = sender.view;
//2D仿射变换函数中的缩放函数来实现视图的放大缩小 //是在原有基础上来改变当前的视图
//函数的第一个参数:现有的视图的transform值
//第二个参数:x轴上的缩放比率
//第三个参数:y轴上的缩放比率 //是在视图最初的transform状态上改变,不管执行多少次,都是以该视图最初的transform状态为基础来改变
view.transform = CGAffineTransformMakeScale(2, 2);
view.transform = CGAffineTransformScale(view.transform, scale, scale);
//每次捏合动作完毕之后,让此捏合值复原,使得它每次都是从100%开始缩放
sender.scale = 1;
}
 

3、旋转手势

//旋转手势
UIRotationGestureRecognizer* rotaGR = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotaAction:)];
rotaGR.delegate = self;
//旋转手势回调方法
- (void)rotaAction:(UIRotationGestureRecognizer*)sender{
//通过手势的到旋转角度
float rota = sender.rotation;
//得到该手势作用的视图
UIView *view = sender.view;
//通过2D仿射变换函数中的旋转函数来使得当前视图旋转。
view.transform = CGAffineTransformRotate(view.transform, rota);
//复原
sender.rotation = 0;
}

4、平移手势

//平移手势
UIPanGestureRecognizer *panGP = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
//平移手势的回调方法
- (void)panAction:(UIPanGestureRecognizer*)sender{
//得到当前手势所在视图
UIView *view = sender.view;
//得到我们在视图上移动的偏移量
CGPoint currentPoint = [sender translationInView:view.superview];
//通过2D仿射变换函数中与位移有关的函数实现视图位置变化
view.transform = CGAffineTransformTranslate(view.transform, currentPoint.x, currentPoint.y);
//复原 // 每次都是从00点开始
[sender setTranslation:CGPointZero inView:view.superview];
}

5、边缘轻扫手势

//边缘轻扫手势
UIScreenEdgePanGestureRecognizer *edgePanGR = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(edgePanAction:)];
edgePanGR.edges = UIRectEdgeAll;
//边缘轻扫手势回调方法
- (void)edgePanAction:(UIScreenEdgePanGestureRecognizer*)sender{
NSLog(@"我成功的触发了屏幕边缘手势");
}

6、长按手势

// ⑥长按手势
UILongPressGestureRecognizer *longPressPR = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressAction:)];
longPressPR.minimumPressDuration = 1;
// ⑥长按手势的回调方法
- (void)longPressAction:(UILongPressGestureRecognizer *)sender{
if (sender.state ==
UIGestureRecognizerStateEnded) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"看你麻痹" message:@"不服你咬死我" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
[alertView show];
}
}

7、轻扫手势

 // ⑦轻扫手势
UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)];
// ⑦轻扫手势的回调方法
- (void)swipeAction:(UISwipeGestureRecognizer *)sender{
if (sender.state == UIGestureRecognizerStateEnded) {
UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"槽尼玛" delegate:self cancelButtonTitle:@"纸张" destructiveButtonTitle:@"哈哈哈" otherButtonTitles:@"切毛毛", nil];
[actionSheet showInView:self.window];
}
}

给imageView视图添加手势

// 3.给图片添加手势  一个视图可以添加多种手势,但是一个手势,只能添加到一个视图上
[imageView addGestureRecognizer:tapGR];
[imageView addGestureRecognizer:pinchGR];
[imageView addGestureRecognizer:rotaGR];
[imageView addGestureRecognizer:panGR];
[imageView addGestureRecognizer:edgePanGR];
[imageView addGestureRecognizer:longPressPR];
[imageView addGestureRecognizer:swipeGR];

当一个视图上想要添加多种手势的时候就要用到手势的代理(重点)

pragma mark ----手势的代理方法

// 使得多个手势可以同时响应
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ // 返回值为YES的时候,当执行一个手势的操作的时候,也可以执行其他手势的操作
return YES;
}
 
 
 
 
 

IOS的七种手势的更多相关文章

  1. iOS七种手势

    // 初始化一个UIimageView UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, ...

  2. iOS事件处理之七种手势

    手势在开发中经常用到,所以就简单通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView = [[UIImageView allo ...

  3. UI中的七种手势

    // // GestureRecognizerViewController.m #import "GestureRecognizerViewController.h" #impor ...

  4. iOS 开发的几种手势

    今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView ...

  5. iOS中常用的手势

    --前言 智能手机问世后的很长一段时间,各大手机厂商都在思考着智能手机应该怎么玩?也都在尝试着制定自己的一套操作方式.直到2007年乔布斯发布了iPhone手机,人们才认识到智能手机就应该这样玩. 真 ...

  6. 模板化的七种排序算法,适用于T* vector<T>以及list<T>

    最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...

  7. Java:单例模式的七种写法

    第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 private Singleton ( ...

  8. 七种机器内部排序的原理与C语言实现,并计算它们的比较次数与移动次数。

    内部排序是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 排序是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个相知有序的序列.排序分为 ...

  9. 基于python的七种经典排序算法

    参考书目:<大话数据结构> 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. ...

随机推荐

  1. 如何让我们的PHP在Jexus中跑起来

    最近一段时间,经常看到不少的朋友在问,应该怎么设置才能够让Jexus支持PHP.其实,Jexus在很早之前就已经是可以支持PHP,像Apache或Nginx一样充当PHP的Web服务器的.不过由于没有 ...

  2. MONO x64 amd_x64

    SharpPcap 是一个.NET 环境下的网络包捕获框架,基于著名的 pcap/WinPcap 库开发.提供了捕获.注入.分析和构建的功能,SharpPcap 还是一个跨平台的库,可以在Mono/. ...

  3. 舍弃Nunit拥抱Xunit

    前言 今天与同事在讨论.Net下测试框架的时候,说到NUnit等大多数测试框架的SetUp以及TearDown方法并不是显得那么完美,所以在公司内部的项目中采用了Xunit框架.那么究竟是什么样的原因 ...

  4. Hadoop1 Centos伪分布式部署

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

  5. topshelf和quartz内部分享

    阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...

  6. 自动添加Linux登录账户,并授予sudo权限

    #!/bin/bash USER=test PASS=$USER GROUP=root HOME=/data/home/$USER # if user not exist if [[ $(cat /e ...

  7. ABP框架 - 工作单元

    文档目录 本节内容: 简介 在ABP中管理连接和事务 约定的工作单元 UnitOfWork 特性 IUnitOfWorkManager 工作单元详情 禁用工作单元 非事务性工作单元 工作单元方法调用另 ...

  8. Convert.ToInt32()、int.Parse()和(int)三者的区别

    Convert.ToInt32将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]); (int)适合简单数据类型之间的转换: ...

  9. Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  10. Nginx 服务器 之Nginx与tomcat实现负载均衡

      本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建 ...