您的位置:首页 > 移动开发 > Swift

Swift-手势识别

2015-12-30 09:58 435 查看
[objc] view
plaincopyprint?





//  

//  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 手势识别