今天为大家介绍一下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. Android(3)—Mono For Android App版本自动更新(2)

    0.前言 这篇博文是上一篇的延续,主要是修改上一个版中的BUG和优化一些待完善的项,也算是结贴,当然还有需要完善的,等日后项目中用到的时候再单独写出来吧,本篇主要写升级改进的部分: 改进1.修复[BU ...

  2. TFS 2015(Visual Studio Team Foundation Server)的下载和安装

    微软现在所有Visual Studio相关的下载到www.visualstudio.com网站下载是非常方便的 下载地址: 下载ISO版本后,进行安装,由于10-20人的小团队,不需要SharePoi ...

  3. 分享阿里云推荐码 IC1L2A,购买服务器可以直接打9折,另附阿里云服务器部署ASP.NET MVC5关键教程

    阿里云推荐码为:IC1L2A 阿里云还是不错滴. 以windows server 2008 R2为例,介绍如何从全新的服务器部署MVC5 站点. 新购买的阿里云服务器是没有IIS的,要安装IIS: 控 ...

  4. 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE

    C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...

  5. Windbg Extension NetExt 使用指南 【2】 ---- NetExt 的基本命令介绍

    摘要 : 本章节介绍NetExt常用的命令. 并且对SOS进行一些对比. NetExt的帮助 要想玩好NetExt, 入门就得看帮助. 看NetExt的帮助可以调用!whelp 命令. 这样hi列举出 ...

  6. 深入解析js异步编程利器Generator

    我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...

  7. Direct3D Draw函数 异步调用原理解析

    概述 在D3D10中,一个基本的渲染流程可分为以下步骤: 清理帧缓存: 执行若干次的绘制: 通过Device API创建所需Buffer: 通过Map/Unmap填充数据到Buffer中: 将Buff ...

  8. Java在DOS命令下的运行及其API文档制作过程

    该文档主要描述java程序在DOS命令下的运行,以及一些常用的命令 常用DOS命令: d: 回车 盘符切换 dir(directory):列出当前目录下的文件以及文件夹 md (make direct ...

  9. ABP框架 - 日志

    文档目录 本节内容: 服务端 获取Logger(记录器) Logger的基类 配置 Abp.Castle.Log4Net 包 客户端 服务端 ABP使用Castle Windsor的日志记录工具,它可 ...

  10. zookeeper集群搭建

    1.由于是第一次搭建zk的集群,过程中遇到些问题,给自己也给遇到问题的人提供一种可能解决问题的方法. 第一步:下载zk的最新版,我下的是3.4.9,在zk的官网,下载后解压到/usr/local ta ...