我的IOS学习之路(三):手势识别器

  在iOS的学习中,对于手势的处理是极为重要的,如对于图片,我们经常需要进行旋转,缩放以及移动等。这里做一下总结,详见代码。

 1 - (void)viewDidLoad
 2 {
 3     [super viewDidLoad];
 4     UIImage *image = [UIImage imageNamed:@"018.png"];
 5     UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
 6     imageView.frame = CGRectMake(80, 80, 200, 350);
 7     [self.view addSubview:imageView];
 8
 9     //开启用户交互
10     imageView.userInteractionEnabled = YES;
11     //缩放手势识别器
12     UIPinchGestureRecognizer *pinGes = [[UIPinchGestureRecognizer alloc] init];
13     pinGes.delegate = self;
14
15     [pinGes addTarget:self action:@selector(pinGes:)];
16     [imageView addGestureRecognizer:pinGes];
17
18     //旋转手势识别器
19     UIRotationGestureRecognizer *rotaGes = [[UIRotationGestureRecognizer alloc] init];
20     rotaGes.delegate = self;
21     imageView.userInteractionEnabled = YES;
22     [rotaGes addTarget:self action:@selector(rota:)];
23     [imageView addGestureRecognizer:rotaGes];
24
25
26     //移动手势识别器
27     UIPanGestureRecognizer *panGes = [[UIPanGestureRecognizer alloc] init];
28     [panGes addTarget:self action:@selector(panGes:)];
29     [imageView addGestureRecognizer:panGes];
30
31     //长按手势识别器
32     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init];
33
34     //设置长按时间标准(默认时间为0.5秒)
35     longPress.minimumPressDuration = 1.0;
36     [longPress addTarget:self action:@selector(longPress:)];
37     [imageView addGestureRecognizer:longPress];
38
39 }
40
41 //此方法的返回值表示手势识别器是否支持多手势操作
42 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
43 {
44     return YES;
45 }
46
47 //长按操作
48 - (void) longPress: (UILongPressGestureRecognizer *)ges
49 {
50     //开始长按时进行的操作
51     if (ges.state == UIGestureRecognizerStateBegan) {
52         NSLog(@"begin");
53         //结束长按时进行的操作
54     }else if (ges.state == UIGestureRecognizerStateEnded){
55         NSLog(@"end");
56     }
57 }
58
59 //移动操作
60 - (void) panGes: (UIPanGestureRecognizer *)ges
61 {
62     //获取相对于父视图移动的距离
63     CGPoint point = [ges translationInView:self.view];
64     //开启动画
65     [UIView beginAnimations:Nil context:Nil];
66     //设置动画时间
67     [UIView setAnimationDuration:1];
68     //通过形变属性移动
69     ges.view.transform = CGAffineTransformTranslate(ges.view.transform, point.x, point.y);
70     //因为手势识别器会对每次移动的距离进行累加,所以当移动一次后,需要将相对移动距离设置为(0,0);
71     [ges setTranslation:CGPointMake(0, 0) inView:self.view];
72
73     //通过中心点移动
74 //    ges.view.center = CGPointMake(ges.view.center.x + point.x, ges.view.center.y + point.y);
75 //    [ges setTranslation:CGPointMake(0, 0) inView:self.view];
76     //动画结束
77     [UIView commitAnimations];
78 }
79
80 //旋转操作
81 - (void) rota: (UIRotationGestureRecognizer *)ges
82 {
83     //设置形变属性
84     ges.view.transform = CGAffineTransformRotate(ges.view.transform, ges.rotation);
85     //因为CGAffineTransformRotate函数会将每一次的旋转角度进行叠加,所以需要将手势识别器的旋转角度置0;
86     ges.rotation = 0;
87 }
88
89 //缩放操作
90 - (void)pinGes: (UIPinchGestureRecognizer *)ges
91 {
92 //    NSLog(@"get in...");
93     //因为CGAffineTransformScale函数会将缩放比例进行累乘,所以需要将手势识别器的缩放比例设置1
94     ges.view.transform = CGAffineTransformScale(ges.view.transform, ges.scale, ges.scale);
95     ges.scale = 1.0f;
96 }
时间: 2024-08-25 17:21:01

我的IOS学习之路(三):手势识别器的相关文章

学习,是不断认识错误的过程 ---我的iOS学习之路

刚刚进入大学的的时候,觉得实验课上很会做实验的人很流弊,觉得只要上好实验课,就会成为一个 cua cua cua 很会写代码的人!然后就在实验课上捣鼓.捣鼓..捣鼓... 参加了社团,青协后就觉得其实会编程其实也没多大用,还是要锻炼一下自己其他方面的能力.因为呆在青协的宣传部,所以每回做活动的时候总会画海报,画呀画呀画,画呀画呀画,,,还会去参加各种各样的宣称活动,只要不是上课时间就青协和社团两边跑.嗯,感觉很充实.. 这种生活一直持续到大二,一次很偶然又很幸运的机会,经一个学长介绍,来到了一个

IOS学习之路- 运行过程

1. 执行Main函数(在main.m文件中) 2. 加载MainStoryborad.storyboard文件 * 创建ViewController文件 * 根据storyboard文件中描述创建ViewController中的UIView(父层) * 创建UIView内部的所有子控件 * 将创建好的所有UIView对象跟ViewController做相应的关联(IBAction,IBoutlet  ) 3. 将程序的第一个控制器内部的UIview显示到手机屏幕上. IOS学习之路- 运行过程

iOS学习之路--下拉刷新和上拉加载更多

iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要的信息和获取最新的信息.那么这种功能如何实现呢,还请跟着笔者继续往下看. 目前来说,主要的实

Jquery学习之路(三) 实现弹出层插件

弹出层的应用还是比较多的,登陆,一些同页面的操作,别人的总归是别人的,自己的才是自己的,所以一直以来想写个弹出层插件.不多废话,直接开始吧! 不想看可以在这里直接下载源码xsPop.zip 1:遮罩层 要弹出层,先要用一个遮罩层挡在下面的页面,此遮罩层是全屏的,页面滚动也要有,所以设置 position: fixed;还要有透明效果,下面是我定义的遮罩层css,取名mask .mask { position: fixed; width: 100%; height: 100%; backgroun

IOS学习之路-- 指针&宏函数

如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,说明指针变量p将来指向的是函数 // 最左边的void说明p指向的函数没有返回值 // 最右边的()说明p指向的函数没有形参 void (*p)(); // 函数名test就是test函数的地址 // 将test函数的地址赋值给了指针变量p // 指针变量p成功指向了test函数 p

IOS学习之路--OC的基础知识

运行过程 1.编写OC程序:.m源文件 2.编译.m文件为.o目标文件:cc -c xxxx.m 3.链接.o文件为a.out可执行文件:cc xxxx.o -framework Foundation 4.执行a.out文件:./a.out #import 的功能跟#include一样,只是更好用,他避免了头文件的多次包含 为了能使用OC的特性, 一定要引入#import <Foundation/Foundation.h> 类定义// @implementation 和 @end // 设计(

IOS学习之路--BLOCK

/* 1.定义block变量: 返回值类型 (^block变量名) (参数类型1, 参数类型2, ....); 2.给block变量赋值 block变量名 = ^(参数类型1 参数名称1, .....) { }; */ /* 1.设置动画属性 2.开始执行动画 3.动画执行完毕 block1 = ^{ 封装了动画开始执行前想做的事情 }; block2 = ^{ 封装了动画执行完毕后想做的事情 }; */ #import <Foundation/Foundation.h> //typedef

IOS 学习之路一 正其心

进入IT行业已经有5个年头,前3年做中间件(WAS) 数据库(ORACLE)的维护,后打算深入学习数据库,做DBA,于是跳槽到一家数据公司.没做多久的数据库,公司就安排做基于 WEB 的监控,独立开发了3个监控系统,发现这是个焦油坑--正如<人月神话>所说,萌生去意.现在回想起来,了解的技术 和用过的平台虽多,但都不精,无核心竞争力.鉴于互联网发展趋势,要么去做大数据,要么到移动互联网.大数据偏学术,而移动物联网更注重 互联网的核心--连接,于是重新上路. 技术爆破 每次技术爆破都小人物的机会

Redis——学习之路三(初识redis config配置)

我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. 我们就从上到下来理解一下这些配置信息中的某些配置: 1.dbfilename是本地持久化存储数据库文件名,默认为dump.rdb.我可以在安装目录文件夹下找到这个文件. 2.requirepass是密码,即连接服务器的密码,默认为空.下面我来设置一个密码然后用带密码的命令连接一遍. 3.msterauth