swift手势识别

  1 //
  2 //  ViewController.swift
  3 //  JieUITapGestureRecognizer
  4 //
  5 //  Created by jiezhang on 14-10-4.
  6 //  Copyright (c) 2014年 jiezhang. All rights reserved.
  7 //
  8
  9 import UIKit
 10
 11 class ViewController: UIViewController, UIActionSheetDelegate {
 12
 13     @IBOutlet var im: UIImageView!
 14     var lastScaleFactor : CGFloat! = 1  //放大、缩小
 15     var netRotation : CGFloat = 1;//旋转
 16     var netTranslation : CGPoint!//平移
 17     var images : NSArray = ["meinv1.jpg","mv2.jpg","mv3.jpg","mv4.jpg","mv5.jpg","mv6.jpg"]// 图片数组
 18     var imageIndex : Int = 0 //数组下标
 19
 20
 21     required init(coder aDecoder: NSCoder) {
 22         super.init(coder: aDecoder)
 23         netTranslation = CGPoint(x: 0, y: 0)
 24     }
 25
 26     override func viewDidLoad() {
 27         super.viewDidLoad()
 28
 29
 30         var tapGesture = UITapGestureRecognizer(target: self, action: "handleTapGesture:")
 31         //设置手势点击数,双击:点2下
 32         tapGesture.numberOfTapsRequired = 2
 33         self.view.addGestureRecognizer(tapGesture)
 34
 35         //手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上
 36         var pinchGesture = UIPinchGestureRecognizer(target: self, action: "handlePinchGesture:")
 37         self.view.addGestureRecognizer(pinchGesture)
 38
 39         //旋转手势:按住option按钮配合鼠标来做这个动作在虚拟器上
 40         var rotateGesture = UIRotationGestureRecognizer(target: self, action: "handleRotateGesture:")
 41         self.view.addGestureRecognizer(rotateGesture)
 42
 43         //拖手势
 44         var panGesture = UIPanGestureRecognizer(target: self, action: "handlePanGesture:")
 45 //        self.view.addGestureRecognizer(panGesture)
 46
 47         //划动手势
 48         //右划
 49         var swipeGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipeGesture:")
 50         self.view.addGestureRecognizer(swipeGesture)
 51         //左划
 52         var swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipeGesture:")
 53         swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.Left //不设置是右
 54         self.view.addGestureRecognizer(swipeLeftGesture)
 55
 56         //长按手势
 57         var longpressGesutre = UILongPressGestureRecognizer(target: self, action: "handleLongpressGesture:")
 58         //长按时间为1秒
 59         longpressGesutre.minimumPressDuration = 1
 60         //允许15秒运动
 61         longpressGesutre.allowableMovement = 15
 62         //所需触摸1次
 63         longpressGesutre.numberOfTouchesRequired = 1
 64         self.view.addGestureRecognizer(longpressGesutre)
 65     }
 66
 67     override func didReceiveMemoryWarning() {
 68         super.didReceiveMemoryWarning()
 69         // Dispose of any resources that can be recreated.
 70     }
 71
 72     //双击屏幕时会调用此方法,放大和缩小图片
 73     func handleTapGesture(sender: UITapGestureRecognizer){
 74         //判断imageView的内容模式是否是UIViewContentModeScaleAspectFit,该模式是原比例,按照图片原时比例显示大小
 75         if im.contentMode == UIViewContentMode.ScaleAspectFit{
 76             //把imageView模式改成UIViewContentModeCenter,按照图片原先的大小显示中心的一部分在imageView
 77            im.contentMode = UIViewContentMode.Center
 78         }else{
 79             im.contentMode = UIViewContentMode.ScaleAspectFit
 80         }
 81     }
 82
 83     //捏的手势,使图片放大和缩小,捏的动作是一个连续的动作
 84     func handlePinchGesture(sender: UIPinchGestureRecognizer){
 85         var factor = sender.scale
 86         if factor > 1{
 87             //图片放大
 88             im.transform = CGAffineTransformMakeScale(lastScaleFactor+factor-1, lastScaleFactor+factor-1)
 89         }else{
 90             //缩小
 91             im.transform = CGAffineTransformMakeScale(lastScaleFactor*factor, lastScaleFactor*factor)
 92         }
 93         //状态是否结束,如果结束保存数据
 94         if sender.state == UIGestureRecognizerState.Ended{
 95             if factor > 1{
 96                 lastScaleFactor = lastScaleFactor + factor - 1
 97             }else{
 98                 lastScaleFactor = lastScaleFactor * factor
 99             }
100         }
101     }
102
103     //旋转手势
104     func handleRotateGesture(sender: UIRotationGestureRecognizer){
105         //浮点类型,得到sender的旋转度数
106         var rotation : CGFloat = sender.rotation
107         //旋转角度CGAffineTransformMakeRotation,改变图像角度
108         im.transform = CGAffineTransformMakeRotation(rotation+netRotation)
109         //状态结束,保存数据
110         if sender.state == UIGestureRecognizerState.Ended{
111             netRotation += rotation
112         }
113     }
114     //拖手势
115     func handlePanGesture(sender: UIPanGestureRecognizer){
116         //得到拖的过程中的xy坐标
117         var translation : CGPoint = sender.translationInView(im)
118         //平移图片CGAffineTransformMakeTranslation
119         im.transform = CGAffineTransformMakeTranslation(netTranslation.x+translation.x, netTranslation.y+translation.y)
120         if sender.state == UIGestureRecognizerState.Ended{
121             netTranslation.x += translation.x
122             netTranslation.y += translation.y
123         }
124     }
125     //划动手势
126     func handleSwipeGesture(sender: UISwipeGestureRecognizer){
127         //划动的方向
128         var direction = sender.direction
129         //判断是上下左右
130         switch (direction){
131         case UISwipeGestureRecognizerDirection.Left:
132             println("Left")
133             imageIndex++;//下标++
134             break
135         case UISwipeGestureRecognizerDirection.Right:
136             println("Right")
137             imageIndex--;//下标--
138             break
139         case UISwipeGestureRecognizerDirection.Up:
140             println("Up")
141             break
142         case UISwipeGestureRecognizerDirection.Down:
143             println("Down")
144             break
145         default:
146             break;
147         }
148         //得到不越界不<0的下标
149         imageIndex = imageIndex < 0 ? images.count-1:imageIndex%images.count
150         //imageView显示图片
151         im.image = UIImage(named: images[imageIndex] as String)
152     }
153
154     //长按手势
155     func handleLongpressGesture(sender : UILongPressGestureRecognizer){
156
157         if sender.state == UIGestureRecognizerState.Began{
158             //创建警告
159             var actionSheet = UIActionSheet(title: "Image options", delegate: self, cancelButtonTitle: "cancel", destructiveButtonTitle: "ok", otherButtonTitles: "other")
160             actionSheet.showInView(self.view)
161         }
162     }
163 }
时间: 2024-12-08 14:24:03

swift手势识别的相关文章

Swift - 手势识别

override func viewDidLoad() { super.viewDidLoad() var swipeRight = UISwipeGestureRecognizer(target: self, action: "respondToSwipeGesture:") swipeRight.direction = UISwipeGestureRecognizerDirection.Right self.view.addGestureRecognizer(swipeRight)

ios开发——实用技术OC-Swift篇&amp;触摸与手势识别

iOS开发学习之触摸事件和手势识别 iOS的输入事件 触摸事件 手势识别 手机摇晃 一.iOS的输入事件 触摸事件(滑动.点击) 运动事件(摇一摇.手机倾斜.行走),不需要人为参与的 远程控制事件(耳机控制手机声音) 1??iOS事件对象都是UIEvent类的实例 UIEvent类对事件类型定义了enum常量: typedef NS_ENUM(NSInteger, UIEventType){ UIEventTypeTouches, UIEventTypeMotion, UIEventRemote

ios开发——实用技术篇Swift篇&amp;多点触摸与手势识别

多点触摸与手势识别 1 2 //点击事件 3 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") 4 self.view.addGestureRecognizer(atap) 5 atap.numberOfTapsRequired = 1 //单击次数 6 atap.numberOfTouchesRequired = 1 //手指个数 7 8 //拖动事件 9 var aPan = UIPanGesture

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: 

Parse 和 Swift 搭建一个像 Instagram

如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用? [编者按]本篇文章作者是Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客.本篇文章中,作者主要介绍了如何基于Parse特点,打造一款类似Instagram的应用,完整而清晰的步骤,为开发者提供一次绝佳的学习体验.本文系 OneAPM 工程师编译整理. Parse 是一个移动应用开发平台,旗下有个很有意思的产品:Parse Core.它的特色之一是允许应用开发者直接将数据存储

iOS开发——UI篇Swift篇&amp;玩转UItableView(一)基本使用

UItableView基本使用 1 class ListViewController: UIViewController , UITableViewDataSource, UITableViewDelegate { 2 3 //定义listTableView 输出口 4 @IBOutlet var listTableView : UITableView! 5 6 //定义数组 7 var items:[String] = ["UITableView高级使用", 8 "自定义U

如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?(3)

[编者按]本篇文章作者是 Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客.本篇文章中,作者主要介绍了如何基于 Parse 特点,打造一款类似 Instagram 的应用,完整而清晰的步骤,为开发者提供一次绝佳的学习体验.本文系 OneAPM 工程师编译整理,这是本系列的第 3 篇文章. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?(1) 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?

如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?

[编者按]本篇文章作者是Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客.本篇文章中,作者主要介绍了如何基于Parse特点,打造一款类似Instagram的应用,完整而清晰的步骤,为开发者提供一次绝佳的学习体验.本文系 OneAPM 工程师编译整理. Parse 是一个移动应用开发平台,旗下有个很有意思的产品:Parse Core.它的特色之一是允许应用开发者直接将数据存储在云端,而无需担心设置服务器或重新设计一个 REST API.Parse Core

Swift实战之2048小游戏

上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完善,就这么整理一下过程中一些值得记录的点吧. 用的Swift版本是2.0,原书中的Swift版本会低一些,所以实践起来有些地方语法并不一样. 一.开始页面   在程序的第一张页面(Main.storyboard)上,只放了一个“开始游戏”按钮,点击按钮,弹出一个提示对话框,确认后,进入游戏页面. 1