• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
//
//  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)
        }
    }
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift-POP(面向协议编程)与OOP(面向对象编程)发布时间:2022-07-14
下一篇:
Swift与OC混编发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap