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)
            }
        }
    }
    

      

  • 相关阅读:
    抓取网页数据C#文件
    ListView嵌套GridView使用详解及注意事项
    listView里面添加gridview
    动态加载图片的Adapter
    如何使用Photoshop(PS)将图片的底色变为透明
    无需序列号安装Photoshop CS6
    Objective-C中.h文件、.m文件中@interface、@synthesize及其它
    Android studio sha1
    Tool bar
    onActivityResult 通过case对不同情况进行处理
  • 原文地址:https://www.cnblogs.com/yesicoo/p/5127067.html
Copyright © 2011-2022 走看看