zoukankan      html  css  js  c++  java
  • 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)  
                }  
            }  
        }  
    
     
    
    注意:滑动手势和拖手势冲突,两个选一个测试,至于测试的效果自己新建一个工程来把代码加入就行
    
  • 相关阅读:
    [SQL Server] sysobjects的介紹
    [R] [Johns Hopkins] R Programming -- week 3
    [R] 繪圖 Par 函数
    [R] [Johns Hopkins] R Programming -- week 4
    [Ms SQL] 基本創建、修改與刪除
    [R] Lexical & Dynamic Scoping / Execution & Calling environments / Closures
    [R] [Johns Hopkins] R Programming 作業 Week 2
    Python之路【第十七篇】:Django【进阶篇 】
    Django之Form组件
    Python之路【第十六篇】:Django【基础篇】
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5329272.html
Copyright © 2011-2022 走看看