[IOS]手势识别(双击、捏、旋转、拖动、划动、长按)

转载:http://blog.csdn.net/jwzhangjie/article/details/40147933

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值