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

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

1、轻拍手势

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

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

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

2、捏合手势

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

3、旋转手势

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

4、平移手势

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

5、边缘轻扫手势

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

6、长按手势

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

7、轻扫手势

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

给imageView视图添加手势

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

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

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

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

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. CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

    最新更新参看: Centos 7.0 安装Mono 3.4 和 Jexus 5.6 2012年初写过一篇<32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0 ...

  2. ReactNative入门 —— 动画篇(下)

    在上篇动画入门文章中我们了解了在 React Native 中简单的动画的实现方式,本篇将作为上篇的延续,介绍如何使用 Animated 实现一些比较复杂的动画. 动画组合 在 Animated 中提 ...

  3. EQueue文件持久化消息关键点设计思路

    要持久化的关键数据有三种 消息: 队列,队列中存放的是消息索引信息,即消息在文件中的物理位置(messageOffset)和在队列中的逻辑位置(queueOffset)的映射信息: 队列消费进度,表示 ...

  4. 简单事件机制Java实现

    一个很简单方便的事件处理方法. 使用效果 事件发布者: //定义事件 public static EventTrans<String> AuthFailed = new EventTran ...

  5. CSS currentColor 变量的使用

    CSS中存在一个神秘的变量,少有人知自然也不怎么为人所用.它就是crrentColor变量(或者说是CSS关键字,但我觉得称为变量好理解些). 初识 它是何物?具有怎样的功效?它从哪里来?带着这些疑问 ...

  6. java遇到 Check $M2_HOME 问题 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    步骤: 1.添加M2_HOME的环境变量 2.Preference->Java->Installed JREs->Edit 选择一个jdk 3.添加 -Dmaven.multiMod ...

  7. Linux下常见的IO模型

    前言 阻塞IO(blocking IO) 非阻塞IO(nonblocking IO) IO复用(IO multiplexing) 异步IO(asynchronous IO (the POSIX aio ...

  8. TODO List - 任务表

    TODO List - 任务表 Angular1 --> Ionic1 --> Vue --> Weex Python --> Django --> Tornado -- ...

  9. PHP 高级编程(2/5) - 反射API

    PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 此外,反射 API 提供了方法来取出函数.类和方法中的文档注释.通过使用反射API可以分析其他的类.接口.方 ...

  10. PHP 面向对象编程和设计模式 (5/5) - PHP 命名空间的使用及名称解析规则

    PHP高级程序设计 学习笔记 2014.06.12 命名空间概述 PHP 在 5.3.0 以后的版本开始支持命名空间.什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这 ...