今天为大家介绍一下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开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  2. IOS开发-几种截屏方法

    IOS开发-几种截屏方法 1.        UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomSc ...

  3. IOS开发之----两种保存用户名和密码实现记住密码库

    使用Keychain存储用户敏感信息 iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储.相对于 NSUserDe ...

  4. iOS开发中常用的手势---边缘手势

    说明:以下方法是开发中使用的方法,有什么不对的或者好的方法,请多多指教! 此处的边缘手势是用来控制左侧抽屉视图的弹出以及收回. 添加手势 : 页面上有多个手势时需要遵循 UIGestureRecogn ...

  5. IOS开发之---触摸和手势

    Touch:在与设备的多点触摸屏交互时生成. 响应者对象 响应者对象就是可以响应事件并对事件作出处理.在iOS中,存在UIResponder类,它定义了响应者对象的所有方法.UIApplication ...

  6. 新手介绍简单一下iOS开发中几种界面传值

    首先在处理iOS-UI中,也许在很多地方需要用到两种甚至多种不同界面之间的传值,相比这也是很多iOS入门成员头疼问题,同样作为新手的我在接触这类传值时候也一脸懵然,经过一段时间的研究,对于简单的传值有 ...

  7. IOS开发中长按的手势事件编程

    长按手势事件: 长按按钮1S后改变按钮颜色: // 长按事件 #import "ViewController.h" @interface ViewController (){ UI ...

  8. iOS开发:自定义控件实现手势解锁

    自定义控件 1.提供initWithFrame:及initWithCoder:方法来初始化: 2.解锁控件只负责展示.触摸.绘图等,存储轨迹.判断轨迹等操作不是解锁控件要做的.因此要定义一个代理,将轨 ...

  9. iOS开发 自定义navigationleftItem 之后手势失效的问题

    @property (nonatomic, strong) UIViewController *currentShowVC; //设置代理 self.navigationController.inte ...

随机推荐

  1. python学习day8

    目录 一.异常 二.多线程 三.守护线程与join 四.GIL与多线程锁 五.递归锁与信号量 六.线程间同步与交互 七.多进程 八.进程间通信与数据共享 九.进程池 一.异常 1.异常处理 在编程过程 ...

  2. mobile端

    1.技术解决方案--------->(widget/event/ajax)->function->data------>XMLHttpRequest----->Serve ...

  3. perl /m 当作多行处理

    高级用法 多行匹配: zjtest7-frontend:/root/0825# cat a2.pl print "1111111111111\n"; my $_="abc ...

  4. [Leetcode][Python]53: Maximum Subarray

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 53: Maximum Subarrayhttps://leetcode.co ...

  5. MinGW安装教程

    首先说明一下 1) MinGw只是其中一种GCC编译环境的安装程序,还有像Cygwin也是差不多的; 2) 由于安装的时候有些地方忘了截图,所以图有些是借鉴别人的; 3) 还要就是安装MinGw,最好 ...

  6. phonegap开发app中踩过的那些坑

    把遇到的问题列出来,假设有解决方式的,偶也会写下来.假设大家有更好解决方法的.欢迎留言噢 phonegap 2.9无法触发deviceready事件 亲们能够看下控制台有木有报错.假设有提示cordo ...

  7. 通过Jetty搭建一个简单的Servlet运行环境

    最近在做一些简单的Servlet开发的时候,感觉每次调试的时候都要发布到tomcat上很麻烦,把程序共享给同事也很麻烦,需要帮他设置本地的tomcat环境. 在网上找了找其他的Servlet运行环境, ...

  8. mysql binlog解析概要

    1,dump协议: 根据数据库的ip+port创建socket,如果创建成功,说明链接建立成功,接下来是使用dump协议订阅binlog 链接建立成功之后,服务端会主动向客户端发送如下问候信息gree ...

  9. jmx使用应该注意的基本规范

    1.标准MBean 名称必需是在要监控的类名后面加上“MBean ”. 2.监控的类和MBean 接口必需在同一包下,也可以理解为注册的接口名字必须以MBean结尾,接口实现类比接口名字少了MBean ...

  10. 使用ADO.net中的链接字符串

    需要引用:System.Configuration命名空间 ConfigurationManager.ConnectionStrings["sqlConnStr"].Connect ...