Swift基础--手势识别(双击捏旋转拖动划动长按)

Posted brave-sailor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift基础--手势识别(双击捏旋转拖动划动长按)相关的知识,希望对你有一定的参考价值。

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

 

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

以上是关于Swift基础--手势识别(双击捏旋转拖动划动长按)的主要内容,如果未能解决你的问题,请参考以下文章

手势识别(拖动,旋转,捏合)

长按手势识别器产生重复位置 (SWIFT)

iOS开发之手势识别汇总

iOS开发之手势识别汇总

iOS开发中六种手势识别

iOS 手势