1. //
  2. //  ViewController.swift
  3. //  JieUITapGestureRecognizer
  4. //
  5. //  Created by jiezhang on 14-10-4.
  6. //  Copyright (c) 2014年 jiezhang. All rights reserved.
  7. //
  8. import UIKit
  9. class ViewController: UIViewController, UIActionSheetDelegate {
  10. @IBOutlet var im: UIImageView!
  11. var lastScaleFactor : CGFloat! = 1  //放大、缩小
  12. var netRotation : CGFloat = 1;//旋转
  13. var netTranslation : CGPoint!//平移
  14. var images : NSArray = ["meinv1.jpg","mv2.jpg","mv3.jpg","mv4.jpg","mv5.jpg","mv6.jpg"]// 图片数组
  15. var imageIndex : Int = 0 //数组下标
  16. required init(coder aDecoder: NSCoder) {
  17. super.init(coder: aDecoder)
  18. netTranslation = CGPoint(x: 0, y: 0)
  19. }
  20. override func viewDidLoad() {
  21. super.viewDidLoad()
  22. var tapGesture = UITapGestureRecognizer(target: self, action: "handleTapGesture:")
  23. //设置手势点击数,双击:点2下
  24. tapGesture.numberOfTapsRequired = 2
  25. self.view.addGestureRecognizer(tapGesture)
  26. //手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上
  27. var pinchGesture = UIPinchGestureRecognizer(target: self, action: "handlePinchGesture:")
  28. self.view.addGestureRecognizer(pinchGesture)
  29. //旋转手势:按住option按钮配合鼠标来做这个动作在虚拟器上
  30. var rotateGesture = UIRotationGestureRecognizer(target: self, action: "handleRotateGesture:")
  31. self.view.addGestureRecognizer(rotateGesture)
  32. //拖手势
  33. var panGesture = UIPanGestureRecognizer(target: self, action: "handlePanGesture:")
  34. //        self.view.addGestureRecognizer(panGesture)
  35. //划动手势
  36. //右划
  37. var swipeGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipeGesture:")
  38. self.view.addGestureRecognizer(swipeGesture)
  39. //左划
  40. var swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipeGesture:")
  41. swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.Left //不设置是右
  42. self.view.addGestureRecognizer(swipeLeftGesture)
  43. //长按手势
  44. var longpressGesutre = UILongPressGestureRecognizer(target: self, action: "handleLongpressGesture:")
  45. //长按时间为1秒
  46. longpressGesutre.minimumPressDuration = 1
  47. //允许15秒运动
  48. longpressGesutre.allowableMovement = 15
  49. //所需触摸1次
  50. longpressGesutre.numberOfTouchesRequired = 1
  51. self.view.addGestureRecognizer(longpressGesutre)
  52. }
  53. override func didReceiveMemoryWarning() {
  54. super.didReceiveMemoryWarning()
  55. // Dispose of any resources that can be recreated.
  56. }
  57. //双击屏幕时会调用此方法,放大和缩小图片
  58. func handleTapGesture(sender: UITapGestureRecognizer){
  59. //判断imageView的内容模式是否是UIViewContentModeScaleAspectFit,该模式是原比例,按照图片原时比例显示大小
  60. if im.contentMode == UIViewContentMode.ScaleAspectFit{
  61. //把imageView模式改成UIViewContentModeCenter,按照图片原先的大小显示中心的一部分在imageView
  62. im.contentMode = UIViewContentMode.Center
  63. }else{
  64. im.contentMode = UIViewContentMode.ScaleAspectFit
  65. }
  66. }
  67. //捏的手势,使图片放大和缩小,捏的动作是一个连续的动作
  68. func handlePinchGesture(sender: UIPinchGestureRecognizer){
  69. var factor = sender.scale
  70. if factor > 1{
  71. //图片放大
  72. im.transform = CGAffineTransformMakeScale(lastScaleFactor+factor-1, lastScaleFactor+factor-1)
  73. }else{
  74. //缩小
  75. im.transform = CGAffineTransformMakeScale(lastScaleFactor*factor, lastScaleFactor*factor)
  76. }
  77. //状态是否结束,如果结束保存数据
  78. if sender.state == UIGestureRecognizerState.Ended{
  79. if factor > 1{
  80. lastScaleFactor = lastScaleFactor + factor - 1
  81. }else{
  82. lastScaleFactor = lastScaleFactor * factor
  83. }
  84. }
  85. }
  86. //旋转手势
  87. func handleRotateGesture(sender: UIRotationGestureRecognizer){
  88. //浮点类型,得到sender的旋转度数
  89. var rotation : CGFloat = sender.rotation
  90. //旋转角度CGAffineTransformMakeRotation,改变图像角度
  91. im.transform = CGAffineTransformMakeRotation(rotation+netRotation)
  92. //状态结束,保存数据
  93. if sender.state == UIGestureRecognizerState.Ended{
  94. netRotation += rotation
  95. }
  96. }
  97. //拖手势
  98. func handlePanGesture(sender: UIPanGestureRecognizer){
  99. //得到拖的过程中的xy坐标
  100. var translation : CGPoint = sender.translationInView(im)
  101. //平移图片CGAffineTransformMakeTranslation
  102. im.transform = CGAffineTransformMakeTranslation(netTranslation.x+translation.x, netTranslation.y+translation.y)
  103. if sender.state == UIGestureRecognizerState.Ended{
  104. netTranslation.x += translation.x
  105. netTranslation.y += translation.y
  106. }
  107. }
  108. //划动手势
  109. func handleSwipeGesture(sender: UISwipeGestureRecognizer){
  110. //划动的方向
  111. var direction = sender.direction
  112. //判断是上下左右
  113. switch (direction){
  114. case UISwipeGestureRecognizerDirection.Left:
  115. println("Left")
  116. imageIndex++;//下标++
  117. break
  118. case UISwipeGestureRecognizerDirection.Right:
  119. println("Right")
  120. imageIndex--;//下标--
  121. break
  122. case UISwipeGestureRecognizerDirection.Up:
  123. println("Up")
  124. break
  125. case UISwipeGestureRecognizerDirection.Down:
  126. println("Down")
  127. break
  128. default:
  129. break;
  130. }
  131. //得到不越界不<0的下标
  132. imageIndex = imageIndex < 0 ? images.count-1:imageIndex%images.count
  133. //imageView显示图片
  134. im.image = UIImage(named: images[imageIndex] as String)
  135. }
  136. //长按手势
  137. func handleLongpressGesture(sender : UILongPressGestureRecognizer){
  138. if sender.state == UIGestureRecognizerState.Began{
  139. //创建警告
  140. var actionSheet = UIActionSheet(title: "Image options", delegate: self, cancelButtonTitle: "cancel", destructiveButtonTitle: "ok", otherButtonTitles: "other")
  141. actionSheet.showInView(self.view)
  142. }
  143. }
  144. }

注意:滑动手势和拖手势冲突,两个选一个测试,至于测试的效果自己新建一个工程来把代码加入就行

Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)的更多相关文章

  1. iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer

    首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...

  2. iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer

    首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...

  3. Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍

    1.UITapGestureRecognizer 点击/双击手势 代码如下: var tapGesture = UITapGestureRecognizer(target: self, action: ...

  4. iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)       1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加 ...

  5. ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...

  6. iOS基础 - 手势识别 与 手势说明

    一.使用手势识别的四个步骤 1> 实例化手势识别 - (id)initWithTarget:(id)target action:(SEL)action; 2> 设置手势识别属性 3> ...

  7. swift基础:第六部分:类与对象

    http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...

  8. swift基础:第二部分:函数和闭包

    今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...

  9. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

随机推荐

  1. iOS开发零基础--Swift篇:Swift中数据类型

    Swift类型的介绍 Swift中的数据类型也有:整型/浮点型/对象类型/结构体类型等等 先了解整型和浮点型 整型 有符号 Int8 : 有符号8位整型 Int16 : 有符号16位整型 Int32 ...

  2. javaweb-url /

    /一直搞得不清不楚 有时候不用加有时加了也行,有时必须加 转发自XXX论坛 推荐使用 <% String path = request.getContextPath(); String base ...

  3. Orchard Compact v1.7.2

    1. 仅包留了Core中的Settings和Shapes, 及Modules, Themes和jQuery模块. 2. 添加了对Oracle的支持. 下载地址: 二进制: Orchard.Compac ...

  4. C#设计模式(14)——模板方法模式(Template Method)

    一.引言 提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简 ...

  5. Python的with语句

    写过多线程程序的人肯定对各种锁很熟悉,尤其是下面这种代码 def lock_usage: lock.Lock() if(...) : lock.Unlock() return lock.Unlock( ...

  6. 改进ConcurrentDictionary并行使用的性能

    上一篇文章“ConcurrentDictionary 对决 Dictionary+Locking”中,我们知道了 .NET 4.0 中提供了线程安全的 ConcurrentDictionary< ...

  7. 进程状态转换、CPU调度算法

    进程的状态转换 进程在运行中不断地改变其运行状态.通常,一个运行进程必须具有以下三种基本状态. 进程状态 执行态run:进程正在使用CPU 等待态wait:进程正在等待I/O完成,不在使用也不能使用C ...

  8. [Java Web整合开发王者归来·刘京华] 1、 Java Web开发

      目录: 1.Web技术简介 2.动态网站与静态网站 3.Java Web开发模式 4.JavaScript简介 1.Web技术简介 PS: 最近还有更凶残的技术,即整个操作系统都是基于Web的,如 ...

  9. GCD中的dispatch_sync、dispatch_sync 分别与串行、并行队列组合执行小实验

    平常开发中会经常用gcd做一下多线程任务,但一直没有对同步.异步任务在串行.并行队列的执行情况做个全面的认识,今天写了个demo跑了下,还是有些新发现的. 代码如下: - (void)touchesB ...

  10. 每天一个linux命令(6):rmdir 命令

    今天学习一下linux中命令: rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的.(注意,rm - r dir命令可代替rmdir,但是有很大危险性.)删 ...