IOS的七种手势

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

// 初始化一个UIimageViewUIImageView *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; }
 
 
 
 

转载于:https://www.cnblogs.com/colinlilide/p/6109154.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql获取后一天_mysql获取当前时间,前一天,后一天

今天是2016年08月01日。date_sub(2016-08-01,interval 1 day) 表示 2016-07-31date_sub(2016-08-01,interval 0 day) 表示 2016-08-01date_sub(2016-08-01,interval -1 day) 表示 2016-08-02date_sub(curdate(),interval 1 day) 表示 2016-07-31date_sub(curdate(),interval -1…

c++获取sqlite3数据库表中所有字段的方法

常用方法: 1.使用sqlite3_get_table函数 2.获取sqlite创建表的sql语句字符串,然后进行解析获取到相应的字段 3.采用配置文件的方式,将所有字段名写入配置文件 方法1:使用sqlite3_get_table函数 代码: char *dbname “…

python sql语句生成_python Django 生成sql语句

class TestModel(models.Model):Namemodels.CharField(max_length64,blankTrue)>>> from django.core.management.color import no_style#Style是用来输出语句时着色的>>> from django.db import connection>>> from django.db.backends import cre…

Oozie的架构

Oozie的架构图,如下: 从oozie的架构图中,可以看到所有的任务都是通过oozie生成相应的任务客户端,并通过任务客户端来提交相应的任务。 继续。。。 转载于:https://www.cnblogs.com/zlslch/p/6117705.html

mysql如何做计划任务_简单的mysql 过程计划任务

首先讲讲过程是什么东西, 过程差不多就是SQL用的java之于方法.把一段sql做成过程后一个简单的调用就可以批量执行这些sql,很方便.其实就像java后台写个执行复杂sql的方法,你只是把这段sql存到数据库里了而已.mysql里面有"过程"和"函数"两个概念, 基本上前者…

Linux的#和$区别

【#】代表 root权限【$】代表普通用户 如果更改了/etc/profile , 或~/.bashrc等文档,可以用任何符号来代替它们。 linux窗口下的【rootlocate~】其中的【~】代表代表用户的家目录(root为/root,一般user则为/home/username)&#x…

python贴吧顶贴_python实现贴吧顶贴机器人

项目目录:– url.txt:多个需要顶起的帖子地址。– reply:多条随机回复的内容。–selenium:浏览器自动化测试框架。首先,我们先使用pip完成selenium的安装。接着,导入pyautogui自动控制鼠标的库。示例代码:p…

Confluence部署攻略 [转]

一、软件介绍 AtlassianConfluence(简称Confluence)是一个专业的wiki程序。它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享。Confluence不是一个开源软件,非商业用途可以免费使用。 Confluence使用简单&…

对自己的忠告

人生的路上有许许多多的十字路口,迷茫、孤独、失败在所难免,不管自己再怎么改变,也不要忘记那个我。对自己的忠告。 难是多做的理由,而不是不做的理由。当你以为看透事情的本质,或许你只不过是盒子中的盒子。一路上&am…

arp欺骗技术

ARP欺骗技术-获取内网目标IP访问图片!简介:ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址。要求: 虚拟机 Kali linux系统 1--命令…

java 读取project_java project 和 java web project 获取路径问题

java project中如何获得相对路径(编译后的目录是在/bin目录下)(一般图片 这些目录放在 项目目录下,与src同级)在static方法中,用String path Test.class.getResource("").getPath();在非static方法中,用String path this.getClas…

前端插件介绍

1.JQuery EasyUI http://www.jeasyui.net/demo/380.html,各种示例代码可以修改使用,简化开发流程。 http://www.jeasyui.net/download/,下载后能查看各种html的源码,引入它的css、js、jquery,然后拿过来demo里的代码就…

java报错 日志_java 日志报错

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.一月 30, 2021 9:13:10 下午 com.github.u…

存储过程实现可扩展灵活接口

序言 本文分享一个通过数据库(ORACLE)的存储过程,遵循“对修改封闭,对增加开放”的开闭原则,实现的可扩展性极强的灵活接口方案。 背景 本人从事离散型MES系统的开发工作,近期负责了一个PCBA(电…

java 缓冲区中的数据存入缓冲区中_java8中NIO缓冲区(Buffer)的数据存储详解|chu...

java8新特性NIO缓冲区(Buffer)的数据存储。ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer.1、缓冲区在java nio中负责数据的存储。缓冲区就是数组。用于存储不同数据类型的数据。根据数据类型不同(boole…

mysql 循环体 如何测试_mysql里如何循环插入数据,进行测试

比如从现在开始一直循环到后年,比如设置8根管线,一直循环下去进行数据叠加,下面是C#代码,不知道怎么写下去了private void button1_Click(object sender, EventArgs e){connectionString “SERVER” server “;” “DATABASE”…

mysql的安装备份恢复_安装使用Percona XtraBackup来备份恢复MySQL的教程

1.安装XtraBackupyum的安装方法:自动$ rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm然后会看到:Retrieving http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpmPrepa…

屏幕尺寸

屏幕尺寸分析 <!DOCTYPE html> <script src"js/jquery-1.11.3.js" type"text/javascript"></script> <html> <head><title>aaa</title><style>body{margin:10px;padding:10px;border:10px solid #000;}&l…

java while do_java中while和do-while的总结

主要内容&#xff1a;1、while循环在程序中的应用2、do-while循环在程序中的应用3、循环结构与判断结构相互嵌套----------------------------------------------------------------------------------------------一、while语法&#xff1b;while(循环条件){循环体}代码演示&a…

scrollWidth,clientWidth,offsetWidth的区别

通过一个demo测试这三个属性的差别。 说明&#xff1a; scrollWidth&#xff1a;对象的实际内容的宽度&#xff0c;不包边线宽度&#xff0c;会随对象中内容超过可视区后而变大。 clientWidth&#xff1a;对象内容的可视区的宽度&#xff0c;不包滚动条等边线&#xff0c;会随对…