iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下:
往viewController.xib文件里拖动一个imageView,并使覆盖整个屏幕,改动属性为:
viewController.h文件:
[cpp]viewplaincopy
1. #import <UIKit/UIKit.h>
2.
3. @interface ViewController : UIViewController{
4. IBOutlet UIImageView *imageView;
5. }
6. @property (nonatomic,retain)IBOutlet UIImageView *imageView;
7. @end
并使xib文件里的imageView与之连接;
然后是viewController.m文件的实现部分:
[cpp]viewplaincopy
1. @synthesize imageView;
2.
3. CGFloat lastScaleFactor=1;//放大、缩小
4. CGFloat netRotation;//旋转
5. CGPoint netTranslation;//平衡
6. NSArray *images;//图片数组
7. int imageIndex=0;//数组下标
8.
9. - (void)viewDidLoad
10. {
11. //1、创建手势实例,并连接方法handleTapGesture,点击手势
12. UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTapGesture:)];
13. //设置手势点击数,双击:点2下
14. tapGesture.numberOfTapsRequired=2;
15. // imageView添加手势识别
16. [imageView addGestureRecognizer:tapGesture];
17. //释放内存
18. [tapGesture release];
19.
20. //2、手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上
21. UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinchGesture:)];
22. [imageView addGestureRecognizer:pinchGesture];//imageView添加手势识别
23. [pinchGesture release];
24.
25. //3、旋转手势:按住option按钮配合鼠标来做这个动作在虚拟器上
26. UIRotationGestureRecognizer *rotateGesture=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(handleRotateGesture:)];
27. [imageView addGestureRecognizer:rotateGesture];
28. [rotateGesture release];
29.
30. //4、拖手势
31. UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanGesture:)];
32. // [imageView addGestureRecognizer:panGesture];
33. [panGesture release];
34.
35. //5、划动手势
36. images=[[NSArray alloc]initWithObjects:@"cell.jpg",@"heihua.jpg",@"xuanyi.jpg", nil];
37. //右划
38. UISwipeGestureRecognizer *swipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];
39. [imageView addGestureRecognizer:swipeGesture];
40. [swipeGesture release];
41. //左划
42. UISwipeGestureRecognizer *swipeLeftGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];
43. swipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;//不设置黑夜是右
44. [imageView addGestureRecognizer:swipeLeftGesture];
45. [swipeLeftGesture release];
46.
47. //6、长按手势
48. UILongPressGestureRecognizer *longpressGesutre=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(handleLongpressGesture:)];
49. //长按时间为1秒
50. longpressGesutre.minimumPressDuration=1;
51. //允许15秒中运动
52. longpressGesutre.allowableMovement=15;
53. //所需触摸1次
54. longpressGesutre.numberOfTouchesRequired=1;
55. [imageView addGestureRecognizer:longpressGesutre];
56. [longpressGesutre release];
57.
58. [super viewDidLoad];
59. // Do any additional setup after loading the view, typically from a nib.
60. }
61. //双击屏幕时会调用此方法,放大和缩小图片
62. -(IBAction)handleTapGesture:(UIGestureRecognizer*)sender{
63. //判断imageView的内容模式是否是UIViewContentModeScaleAspectFit,该模式是原比例,按照图片原时比例显示大小
64. if(sender.view.contentMode==UIViewContentModeScaleAspectFit){
65. //把imageView模式改成UIViewContentModeCenter,按照图片原先的大小显示中心的一部分在imageView
66. sender.view.contentMode=UIViewContentModeCenter;
67. }else{
68. sender.view.contentMode=UIViewContentModeScaleAspectFit;
69. }
70. }
71. //捏的手势,使图片放大和缩小,捏的动作是一个连续的动作
72. -(IBAction)handlePinchGesture:(UIGestureRecognizer*)sender{
73. //得到sender捏手势的大小
74. CGFloat factor=[(UIPinchGestureRecognizer*)sender scale];
75. if(factor>1){
76. //图片放大
77. sender.view.transform=CGAffineTransformMakeScale(lastScaleFactor+(factor-1), (lastScaleFactor+(factor-1)));
78.
79. }else{
80. //缩小
81. sender.view.transform=CGAffineTransformMakeScale(lastScaleFactor*factor, lastScaleFactor*factor);
82.
83. }
84. //状态是否结束,如果结束保存数据
85. if(sender.state==UIGestureRecognizerStateEnded){
86. if(factor>1){
87. lastScaleFactor+=(factor-1);
88. }else{
89. lastScaleFactor*=factor;
90. }
91. }
92. }
93. //旋转手势
94. -(IBAction)handleRotateGesture:(UIGestureRecognizer*)sender{
95. //浮点类型,得到sender的旋转度数
96. CGFloat rotation=[(UIRotationGestureRecognizer*)sender rotation];
97. //旋转角度CGAffineTransformMakeRotation
98. CGAffineTransform transform=CGAffineTransformMakeRotation(rotation+netRotation);
99. //改变图像角度
100. sender.view.transform=transform;
101. //状态结束,保存数据
102. if(sender.state==UIGestureRecognizerStateEnded){
103. netRotation+=rotation;
104. }
105.
106. }
107. //拖手势
108. -(IBAction)handlePanGesture:(UIGestureRecognizer*)sender{
109. //得到拖的过程中的xy坐标
110. CGPoint translation=[(UIPanGestureRecognizer*)sender translationInView:imageView];
111. //平移图片CGAffineTransformMakeTranslation
112. sender.view.transform=CGAffineTransformMakeTranslation(netTranslation.x+translation.x, netTranslation.y+translation.y);
113. //状态结束,保存数据
114. if(sender.state==UIGestureRecognizerStateEnded){
115. netTranslation.x+=translation.x;
116. netTranslation.y+=translation.y;
117. }
118.
119. }
120. //划动手势
121. -(IBAction)handleSwipeGesture:(UIGestureRecognizer*)sender{
122. //划动的方向
123. UISwipeGestureRecognizerDirection direction=[(UISwipeGestureRecognizer*) sender direction];
124. //判断是上下左右
125. switch (direction) {
126. case UISwipeGestureRecognizerDirectionUp:
127. NSLog(@"up");
128. break;
129. case UISwipeGestureRecognizerDirectionDown:
130. NSLog(@"down");
131. break;
132. case UISwipeGestureRecognizerDirectionLeft:
133. NSLog(@"left");
134. imageIndex++;//下标++
135. break;
136. case UISwipeGestureRecognizerDirectionRight:
137. NSLog(@"right");
138. imageIndex--;//下标--
139. break;
140. default:
141. break;
142. }
143. //得到不越界不<0的下标
144. imageIndex=(imageIndex<0)?([images count]-1):imageIndex%[images count];
145. //imageView显示图片
146. imageView.image=[UIImage imageNamed:[images objectAtIndex:imageIndex]];
147.
148. }
149. //长按手势
150. -(IBAction)handleLongpressGesture:(UIGestureRecognizer*)sender{
151. //创建警告
152. UIActionSheet *actionSheet=[[UIActionSheet alloc]initWithTitle:@"Image options" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Save Image",@"Copy", nil];
153. //当前view显示警告
154. [actionSheet showInView:self.view];
155. [actionSheet release];
156. }
157. -(void)dealloc{
158. [images release];
159. [imageView release];
160. [super dealloc];
161. }
iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer的更多相关文章
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...
- Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
// // ViewController.swift // JieUITapGestureRecognizer // // Created by jiezhang on 14-10-4. // ...
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
1.UITapGestureRecognizer 点击/双击手势 代码如下: var tapGesture = UITapGestureRecognizer(target: self, action: ...
- iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加 ...
- ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...
- Iphone H5上传照片被旋转
最近做项目发现在Iphone下,我们上传图片都会被翻转,最后查阅资料发现,的确是IOS的问题 不说过程,直接解决方法 iOS下,html方式使用<input type="file&qu ...
- 【转】iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) -- 不错不错
原文网址:http://blog.csdn.net/totogo2010/article/details/8615940 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手 ...
- Winform 图片鼠标滚动查看(放大,缩小,旋转,拖动查看)[日常随笔]
方法千千万,我只是其中一笔[通过控制PictureBox来控制图片,图片完全施展在控件中]...几久不做,还真有点陌生! 窗体构造中添加鼠标滚动: /// <summary> /// 窗体 ...
- javascript 手势缩放 旋转 拖动支持:hammer.js
原文: https://cdn.rawgit.com/hammerjs/hammer.js/master/tests/manual/visual.html /*! Hammer.JS - v2.0.4 ...
随机推荐
- JS中的自执行函数
本来规划的是2013年,狠狠的将JS学习下,谁知计划赶不上变化,计划泡汤了.13年的我对JS来说可以说是属于跟风,对它的理解和认识也仅仅是皮毛而已,也是因为要完成<ArcGIS API for ...
- VC编程技巧:IE控件的高级用法
一.如何显示内存中的 HTML 网页 二.屏蔽 IE 控件的上下文菜单 三.扩展 HTML 脚本中的 external 对象 四.显示 HTML 样式的对话窗 五.执行 HTML 脚本 http:// ...
- 【HDOJ】3473 Minimum Sum
划分树解.主席树解MLE. /* 3473 */ #include <iostream> #include <sstream> #include <string> ...
- git log
http://git-scm.com/book/zh/v2 https://backlogtool.com/git-guide/tw/contents/ http://gitbook.liuh ...
- mysql MVCC
InnoDB多版本(MVCC)实现简要分析 MVCC实现-MySQL Innodb MVCC实现 MVCC浅析 mysql的mvcc(多版本并发控制) mysql innodb mvcc 读一致性(R ...
- [原]Unity3D深入浅出 - 认识开发环境中的Layers面板
Layers(分层)下拉列表:用来控制Scene视图中游戏对象的显示,在下拉菜单中为勾选状态的物体将显示在Scene视图中. Everything:显示所有的游戏对象 Nothing:不显示任何游戏对 ...
- jQuery Mobile 入门教程
你每天都会对着它讲话,和它玩游戏,用它看新闻——没错,它就是你裤兜里的智能手机.android,黑莓还是iphone?为了让你清楚意识到究竟哪些才算是智能手机,我在下面总结了一个智能手机系统/设备的列 ...
- RMAN 备份与恢复深入解析(二)
RMAN 备份与恢复深入解析(一) http://space.itpub.net/26686207/viewspace-760869 更多精彩内容尽在 www.leonarding.com < ...
- vmware 虚拟机 mount :no medium found解决方法
使用vmware时,在虚拟机设置里,设置CD/DVD为系统镜像,挂载时,有时会有找不到介质或者no medium found之类的提示.根本原因是iso镜像并没有加载到虚拟机系统内.解决办法: 首先确 ...
- SSH信任
配置SSH的目的就是使得两个节点的主机之间的相同用户可以无障碍的通信,SSH主要包括两条命令,即scp和ssh.当用户在一个节点上安装和配置RAC软件时,SSH将通过scp命令,以对等用户的身份,将软 ...