IOS的七种手势
今天为大家介绍一下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的七种手势的更多相关文章
- iOS七种手势
// 初始化一个UIimageView UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, ...
- iOS事件处理之七种手势
手势在开发中经常用到,所以就简单通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView = [[UIImageView allo ...
- UI中的七种手势
// // GestureRecognizerViewController.m #import "GestureRecognizerViewController.h" #impor ...
- iOS 开发的几种手势
今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView ...
- iOS中常用的手势
--前言 智能手机问世后的很长一段时间,各大手机厂商都在思考着智能手机应该怎么玩?也都在尝试着制定自己的一套操作方式.直到2007年乔布斯发布了iPhone手机,人们才认识到智能手机就应该这样玩. 真 ...
- 模板化的七种排序算法,适用于T* vector<T>以及list<T>
最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...
- Java:单例模式的七种写法
第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 private Singleton ( ...
- 七种机器内部排序的原理与C语言实现,并计算它们的比较次数与移动次数。
内部排序是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 排序是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个相知有序的序列.排序分为 ...
- 基于python的七种经典排序算法
参考书目:<大话数据结构> 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. ...
随机推荐
- 绿色版的Linux.NET——“Jws.Mono”(续)
在前一篇文章中,我们简略的介绍了jws.mono的安装使用,以及我们如何自己动手做一个jws.mono出来. 在文章发表之后的几天里,我一直觉得有点不妥之处,直到后来猛然的意识到:我们自己动手做的jw ...
- Asp.Net跨平台:Ubuntu14.0+Mono+Jexus+Asp.Net
Asp.Net跨平台的文章园子里有很多,这里给自己搭建的情况做一下总结,方便以后查看. 参考网站: http://www.linuxdot.net/(Linux DotNET大本营 ) http ...
- 说说DOM的那些事儿
引子 先来一颗栗子: <img src="/sub/123.jpg" alt="test" /> <script type="tex ...
- Go语言实战
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文通过从无到有创建一个利用Go语言实现的非常简单的HttpServe ...
- 使用Metrics监控应用程序的性能
在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如当前系统中对 ...
- 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...
- 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转
昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...
- 5.SVM核函数
核函数(Kernels) 定义 1.1 (核或正定核) 设是中的一个子集,称定义在上的函数是核函数,如果存在一个从到Hilbert空间的映射 使得对任意的,都成立.其中表示Hilbert空间中的内积. ...
- 2. SVM线性分类器
在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子.如图所示 和是要区分的两个类别,在二维平面中它们的样本如上图所示.中间的直 ...
- Java异常总结
异常就是在程序中可能要发生的未知错误,java机制中异常分为2大类:Exception和Error. 对异常的处理方式有2种,一是将异常通过关键字throws抛出,二是将异常进行try catch处理 ...