首页 > 代码库 > Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
// // ViewController.swift // JieUITapGestureRecognizer // // Created by jiezhang on 14-10-4. // Copyright (c) 2014年 jiezhang. All rights reserved. // import UIKit class ViewController: UIViewController, UIActionSheetDelegate { @IBOutlet var im: UIImageView! var lastScaleFactor : CGFloat! = 1 //放大、缩小 var netRotation : CGFloat = 1;//旋转 var netTranslation : CGPoint!//平移 var images : NSArray = ["meinv1.jpg","mv2.jpg","mv3.jpg","mv4.jpg","mv5.jpg","mv6.jpg"]// 图片数组 var imageIndex : Int = 0 //数组下标 required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) netTranslation = CGPoint(x: 0, y: 0) } override func viewDidLoad() { super.viewDidLoad() var tapGesture = UITapGestureRecognizer(target: self, action: "handleTapGesture:") //设置手势点击数,双击:点2下 tapGesture.numberOfTapsRequired = 2 self.view.addGestureRecognizer(tapGesture) //手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上 var pinchGesture = UIPinchGestureRecognizer(target: self, action: "handlePinchGesture:") self.view.addGestureRecognizer(pinchGesture) //旋转手势:按住option按钮配合鼠标来做这个动作在虚拟器上 var rotateGesture = UIRotationGestureRecognizer(target: self, action: "handleRotateGesture:") self.view.addGestureRecognizer(rotateGesture) //拖手势 var panGesture = UIPanGestureRecognizer(target: self, action: "handlePanGesture:") // self.view.addGestureRecognizer(panGesture) //划动手势 //右划 var swipeGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipeGesture:") self.view.addGestureRecognizer(swipeGesture) //左划 var swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipeGesture:") swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.Left //不设置是右 self.view.addGestureRecognizer(swipeLeftGesture) //长按手势 var longpressGesutre = UILongPressGestureRecognizer(target: self, action: "handleLongpressGesture:") //长按时间为1秒 longpressGesutre.minimumPressDuration = 1 //允许15秒运动 longpressGesutre.allowableMovement = 15 //所需触摸1次 longpressGesutre.numberOfTouchesRequired = 1 self.view.addGestureRecognizer(longpressGesutre) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //双击屏幕时会调用此方法,放大和缩小图片 func handleTapGesture(sender: UITapGestureRecognizer){ //判断imageView的内容模式是否是UIViewContentModeScaleAspectFit,该模式是原比例,按照图片原时比例显示大小 if im.contentMode == UIViewContentMode.ScaleAspectFit{ //把imageView模式改成UIViewContentModeCenter,按照图片原先的大小显示中心的一部分在imageView im.contentMode = UIViewContentMode.Center }else{ im.contentMode = UIViewContentMode.ScaleAspectFit } } //捏的手势,使图片放大和缩小,捏的动作是一个连续的动作 func handlePinchGesture(sender: UIPinchGestureRecognizer){ var factor = sender.scale if factor > 1{ //图片放大 im.transform = CGAffineTransformMakeScale(lastScaleFactor+factor-1, lastScaleFactor+factor-1) }else{ //缩小 im.transform = CGAffineTransformMakeScale(lastScaleFactor*factor, lastScaleFactor*factor) } //状态是否结束,如果结束保存数据 if sender.state == UIGestureRecognizerState.Ended{ if factor > 1{ lastScaleFactor = lastScaleFactor + factor - 1 }else{ lastScaleFactor = lastScaleFactor * factor } } } //旋转手势 func handleRotateGesture(sender: UIRotationGestureRecognizer){ //浮点类型,得到sender的旋转度数 var rotation : CGFloat = sender.rotation //旋转角度CGAffineTransformMakeRotation,改变图像角度 im.transform = CGAffineTransformMakeRotation(rotation+netRotation) //状态结束,保存数据 if sender.state == UIGestureRecognizerState.Ended{ netRotation += rotation } } //拖手势 func handlePanGesture(sender: UIPanGestureRecognizer){ //得到拖的过程中的xy坐标 var translation : CGPoint = sender.translationInView(im) //平移图片CGAffineTransformMakeTranslation im.transform = CGAffineTransformMakeTranslation(netTranslation.x+translation.x, netTranslation.y+translation.y) if sender.state == UIGestureRecognizerState.Ended{ netTranslation.x += translation.x netTranslation.y += translation.y } } //划动手势 func handleSwipeGesture(sender: UISwipeGestureRecognizer){ //划动的方向 var direction = sender.direction //判断是上下左右 switch (direction){ case UISwipeGestureRecognizerDirection.Left: println("Left") imageIndex++;//下标++ break case UISwipeGestureRecognizerDirection.Right: println("Right") imageIndex--;//下标-- break case UISwipeGestureRecognizerDirection.Up: println("Up") break case UISwipeGestureRecognizerDirection.Down: println("Down") break default: break; } //得到不越界不<0的下标 imageIndex = imageIndex < 0 ? images.count-1:imageIndex%images.count //imageView显示图片 im.image = UIImage(named: images[imageIndex] as String) } //长按手势 func handleLongpressGesture(sender : UILongPressGestureRecognizer){ if sender.state == UIGestureRecognizerState.Began{ //创建警告 var actionSheet = UIActionSheet(title: "Image options", delegate: self, cancelButtonTitle: "cancel", destructiveButtonTitle: "ok", otherButtonTitles: "other") actionSheet.showInView(self.view) } } }
注意:滑动手势和拖手势冲突,两个选一个测试,至于测试的效果自己新建一个工程来把代码加入就行
Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。