我的IOS学习之路(三):手势识别器
在iOS的学习中,对于手势的处理是极为重要的,如对于图片,我们经常需要进行旋转,缩放以及移动等。这里做一下总结,详见代码。
- (void)viewDidLoad { [super viewDidLoad]; UIImage *image = [UIImage imageNamed:@"018.png"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; imageView.frame = CGRectMake(, , , ); [self.view addSubview:imageView]; //开启用户交互 imageView.userInteractionEnabled = YES; //缩放手势识别器 UIPinchGestureRecognizer *pinGes = [[UIPinchGestureRecognizer alloc] init]; pinGes.delegate = self; [pinGes addTarget:self action:@selector(pinGes:)]; [imageView addGestureRecognizer:pinGes]; //旋转手势识别器 UIRotationGestureRecognizer *rotaGes = [[UIRotationGestureRecognizer alloc] init]; rotaGes.delegate = self; imageView.userInteractionEnabled = YES; [rotaGes addTarget:self action:@selector(rota:)]; [imageView addGestureRecognizer:rotaGes]; //移动手势识别器 UIPanGestureRecognizer *panGes = [[UIPanGestureRecognizer alloc] init]; [panGes addTarget:self action:@selector(panGes:)]; [imageView addGestureRecognizer:panGes]; //长按手势识别器 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init]; //设置长按时间标准(默认时间为0.5秒) longPress.minimumPressDuration = 1.0; [longPress addTarget:self action:@selector(longPress:)]; [imageView addGestureRecognizer:longPress]; } //此方法的返回值表示手势识别器是否支持多手势操作 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } //长按操作 - (void) longPress: (UILongPressGestureRecognizer *)ges { //开始长按时进行的操作 if (ges.state == UIGestureRecognizerStateBegan) { NSLog(@"begin"); //结束长按时进行的操作 }else if (ges.state == UIGestureRecognizerStateEnded){ NSLog(@"end"); } } //移动操作 - (void) panGes: (UIPanGestureRecognizer *)ges { //获取相对于父视图移动的距离 CGPoint point = [ges translationInView:self.view]; //开启动画 [UIView beginAnimations:Nil context:Nil]; //设置动画时间 [UIView setAnimationDuration:]; //通过形变属性移动 ges.view.transform = CGAffineTransformTranslate(ges.view.transform, point.x, point.y); //因为手势识别器会对每次移动的距离进行累加,所以当移动一次后,需要将相对移动距离设置为(0,0); [ges setTranslation:CGPointMake(, ) inView:self.view]; //通过中心点移动 // ges.view.center = CGPointMake(ges.view.center.x + point.x, ges.view.center.y + point.y); // [ges setTranslation:CGPointMake(0, 0) inView:self.view]; //动画结束 [UIView commitAnimations]; } //旋转操作 - (void) rota: (UIRotationGestureRecognizer *)ges { //设置形变属性 ges.view.transform = CGAffineTransformRotate(ges.view.transform, ges.rotation); //因为CGAffineTransformRotate函数会将每一次的旋转角度进行叠加,所以需要将手势识别器的旋转角度置0; ges.rotation = ; } //缩放操作 - (void)pinGes: (UIPinchGestureRecognizer *)ges { // NSLog(@"get in..."); //因为CGAffineTransformScale函数会将缩放比例进行累乘,所以需要将手势识别器的缩放比例设置1 ges.view.transform = CGAffineTransformScale(ges.view.transform, ges.scale, ges.scale); ges.scale = 1.0f; }
我的IOS学习之路(三):手势识别器的更多相关文章
- IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路
在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本. ...
- 学习之路三十九:新手学习 - Windows API
来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. ...
- 浅谈iOS学习之路(转)
转眼学习iOS已经快两年的时间了,这个路上有挫折也有喜悦,一步步走过来发现这个过程是我这一辈子的财富,我以前的老大总是对我说,年轻就是最大的资本(本人91年),现在才算是慢慢的体会到,反观自己走过的这 ...
- 浅谈iOS学习之路
转眼学习iOS已经快两年的时间了,这个路上有挫折也有喜悦,一步步走过来发现这个过程是我这一辈子的财富,我以前的老大总是对我说,年轻就是最大的资本(本人91年),现在才算是慢慢的体会到,反观自己走过的这 ...
- 【学习总结】UIGestureRecognizer(手势识别器)
基本知识点 : -> IOS 3.2之后 , 苹果推出了手势识别功能 ( Gesture Recognizer ) 在触摸事件处理方面 , 简化开发难度. -> UIGesture Rec ...
- IOS 响应者链条 and UIGestureRecognizer 手势识别器)
一次完整的触摸事件的传递响应的过程 UIAppliction --> UIWiondw -->递归找到最适合处理事件的控件 控件调用touches方法-->判断是否实现touches ...
- [iOS UI进阶 - 3.2] 手势识别器UIGestureRecognizer
A.系统提供的手势识别器 1.敲击手势 UITapGestureRecognizer numberOfTapsRequired: 敲击次数 numberOfTouchesRequired: 同时敲 ...
- 纪录我的iOS学习之路
学习资料的网址 田伟宇(Casa Taloyum)有几篇介绍iOS架构的文章,一级棒!原博客链接. iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方 ...
随机推荐
- Android 屏幕适配方式
适配:即当前应用在相同的手机上面显示相同的效果.适配前需要首先确定当前手机所属像素密度类型(如:xhdpi.hdpi.mdpi等) 像素密度:每英寸上分布的像素点个数,单位(dpi,ppi),利用勾股 ...
- C语言入门(1)——C语言概述
1.程序与编程语言 我们使用计算机离不开程序,程序告诉计算机应该如何运行.程序(Program)是一个精确说明如何进行计算的指令序列.这里的计算可以是数学运算,比如通过一些数学公式求解,也可以是符号运 ...
- ssh login nova vm
$ sudo cat >> /usr/bin/nova-ssh << END FIRST=$1 IDX=`expr index $1 "@"`if [[ ...
- 起启航-华夏互联与杰华网络合体结盟打造本土IT利舰
北京时间2013年9月9日消息: 领先的软件研发企业上海逐一软件科技有限公司与专业互联网推广运营机构南昌杰华网络开发有限公司达成协议,双方将建立紧密合作关系与集团运营体制,并在未来的10个月内进行相应 ...
- netbeans字体与颜色配置模板相关网站
NetBeans Themes -Color Schemes of the NetBeans IDE NetBeans ThemeBuilder
- Android中实现ListView圆角效果[转]
本文演示如何Android中实现ListView圆角效果. 无论是网站,还是APP,人们都爱看一些新颖的视图效果.直角看多了,就想看看圆角,这几年刮起了一阵阵的圆角设计风:CSS新标准纳入圆角元素,特 ...
- 全互联结构DVPN综合配置示例
以下内容摘自正在全面热销的最新网络设备图书“豪华四件套”之一<H3C路由器配置与管理完全手册>(第二版)(其余三本分别是:<Cisco交换机配置与管理完全手册>(第二版).&l ...
- DataTable 修改列名 删除列 调整列顺序
DataTable myDt =dt;//删除列myDt.Columns.Remove("minArea");myDt.Columns.Remove("maxArea&q ...
- vs 2005 在IE下断点不起作用
vs2005 加断点调试,ie下不起作用. 1. 点击[开始]->[运行] 命令:regedit. 2. 定位到HKEY_LOCALMACHINE -> SOFTWARE -> Mi ...
- Page.ClientScript.RegisterStartupScript 与 Page.ClientScript.RegisterClientScriptBlock 之间的区别
Page.ClientScript.RegisterClientScriptBlock 在页面紧跟<form>之后,整个页面未完全加载完成. Page.ClientScript.Regis ...