在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学习之路(三):手势识别器的更多相关文章

  1. IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路

    在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本. ...

  2. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

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

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  4. 浅谈iOS学习之路(转)

    转眼学习iOS已经快两年的时间了,这个路上有挫折也有喜悦,一步步走过来发现这个过程是我这一辈子的财富,我以前的老大总是对我说,年轻就是最大的资本(本人91年),现在才算是慢慢的体会到,反观自己走过的这 ...

  5. 浅谈iOS学习之路

    转眼学习iOS已经快两年的时间了,这个路上有挫折也有喜悦,一步步走过来发现这个过程是我这一辈子的财富,我以前的老大总是对我说,年轻就是最大的资本(本人91年),现在才算是慢慢的体会到,反观自己走过的这 ...

  6. 【学习总结】UIGestureRecognizer(手势识别器)

    基本知识点 : -> IOS 3.2之后 , 苹果推出了手势识别功能 ( Gesture Recognizer ) 在触摸事件处理方面 , 简化开发难度. -> UIGesture Rec ...

  7. IOS 响应者链条 and UIGestureRecognizer 手势识别器)

    一次完整的触摸事件的传递响应的过程 UIAppliction --> UIWiondw -->递归找到最适合处理事件的控件 控件调用touches方法-->判断是否实现touches ...

  8. [iOS UI进阶 - 3.2] 手势识别器UIGestureRecognizer

    A.系统提供的手势识别器   1.敲击手势 UITapGestureRecognizer numberOfTapsRequired: 敲击次数 numberOfTouchesRequired: 同时敲 ...

  9. 纪录我的iOS学习之路

    学习资料的网址 田伟宇(Casa Taloyum)有几篇介绍iOS架构的文章,一级棒!原博客链接. iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方 ...

随机推荐

  1. J2SE知识点摘记(二十五)

    Set 1.5.1        概述 Java 中的Set和正好和数学上直观的集(set)的概念是相同的.Set最大的特性就是不允许在其中存放的元素是重复的.根据这个特点,我们就可以使用Set 这个 ...

  2. Oracle EBS-SQL (SYS-23):用户权限查询.sql

    select b.user_name, b.description, b.creation_date, d.responsibility_name   from fnd_user b, fnd_use ...

  3. 解密电子书之一:电子墨水(eink)

    今日,关于电子书的话题不断,先是盛大抖了个攒,测试/定价/赔钱的营销策略引来多方质疑.而后汉王又抛出个8寸/800MHz/ARM A8的指标产品大打性能牌. 身为电子行业网站,与非网在时尚数码热潮面前 ...

  4. 搭建Android开发环境之——Android4.0.3, 4.1, 4.2, 4.3, 4.x,及升级 ADT(22.0.5)和SDK(22.x)

    1.首先要下载相关的软件 1). JDK 6 以上 2). eclipse( Version 3.6.2  or higher ) 点击下载 3). SDK(android-sdk_r18-windo ...

  5. mysql 权限控制具体解释

    概述 mysql权限控制在不同的上下文和不同的操作水平上都能够进行控制,他们包括例如以下几个 ** 管理权限能够同意用户管理mysql server的操作. 这些权限控制是全局的,不是针对某个特定的数 ...

  6. oracle表设置主键自增长

    create or replace table TBL_SYS_USER (   user_id             NUMBER(19) not null,   user_name        ...

  7. 1.一步一步学c#(一):.NET体系结构(知识点)

    一.C#和.NET关系     1. 首先C#语言有两个很重要的方面:第一它是为了Microsoft的.NET Framework的结合而设计的,其次它是一种为问题而设计解决问题的方法的语言,它有很多 ...

  8. 使用CSS3伸缩盒实现图片垂直居中

    用CSS实现图片垂直居中的方法有很多,针对移动端设备可以用CSS3伸缩盒来实现图片垂直居中. 代码如下: <div class="box"> <img src=& ...

  9. Javascript 基础编程练习一

    Javascript 基础互动编程,这篇练习结合了function 函数名(), onclick 时间, prompt输入窗口, window.open和confirm窗口, 任务 1.新窗口打开时弹 ...

  10. gulp使用心得

    本文假设你之前没有用过任何任务脚本(task runner)和命令行工具,一步步教你上手Gulp.不要怕,它其实很简单,我会分为五步向你介绍gulp并帮助你完成一些惊人的事情.那就直接开始吧. 第一步 ...