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)
- }
- }
- }
注意:滑动手势和拖手势冲突,两个选一个测试,至于测试的效果自己新建一个工程来把代码加入就行
Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)的更多相关文章
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
1.UITapGestureRecognizer 点击/双击手势 代码如下: var tapGesture = UITapGestureRecognizer(target: self, action: ...
- iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加 ...
- ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...
- iOS基础 - 手势识别 与 手势说明
一.使用手势识别的四个步骤 1> 实例化手势识别 - (id)initWithTarget:(id)target action:(SEL)action; 2> 设置手势识别属性 3> ...
- swift基础:第六部分:类与对象
http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...
- swift基础:第二部分:函数和闭包
今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...
- Swift基础语法学习总结(转)
Swift基础语法学习总结 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...
随机推荐
- [转]DOS特殊字符转义方法
http://www.robvanderwoude.com/escapechars.php 期望得到的字符 转义后字符 说明 % %% May not always be required in do ...
- MySql、SqlServer、Oracle 三种数据库查询分页方式
SQL Server关于分页 SQL 的资料许多,有的使用存储过程,有的使用游标.本人不喜欢使用游标,我觉得它耗资.效率低:使用存储过程是个不错的选择,因为存储过程是颠末预编译的,执行效率高,也更灵活 ...
- [ACM_模拟] ZJUT 1155 爱乐大街的门牌号 (规律 长为n的含k个逆序数的最小字典序)
Description ycc 喜欢古典音乐是一个 ZJUTACM 集训队中大家都知道的事情.为了更方便地聆听音乐,最近 ycc 特意把他的家搬到了爱乐大街(德语Philharmoniker-Stra ...
- Linux:Shell 常用通配符
字符 含义 * 匹配 0 或多个字符 ? 匹配任意一个字符 [list] 匹配 list 中的任意单一字符 [!list] 匹配 除list 中的任意单一字符以外的字符 [c1-c2] 匹配 c1-c ...
- pasteimg浏览器中粘贴图片jQuery插件
pasteimg是一款可以在浏览器中实现图片粘贴的jQuery插件,兼容Chrome.Firefox.IE11以及其他使用这些内核的浏览器,比如,国内著名的360浏览器. pasteimg可以识别浏览 ...
- js不是从上到下执行的吗?
如果说js是从上到下解释执行的, 那么,按道理应该会执行错误前面的代码. 如: [代码一] //输出1,2,到3报错 console.log("一") console.log(&q ...
- Atitit.软件兼容性原理与实践 v3 q326.docx
Atitit.软件兼容性原理与实践 v3 q326.docx 1. 架构兼容性1 2. Api兼容性1 2.1. 新api vs 修改旧的api1 3. Web方面的兼容性(js,html)1 3 ...
- atitit.js 各版本 and 新特性跟浏览器支持报告
atitit.js 各版本 and 新特性跟浏览器支持报告 一个完整的JavaScript实现是由以下3个不同部分组成的 •核心(ECMAScript)--JavaScript的核心ECMAScrip ...
- java异常处理——题
1.建立exception包,编写TestException.java程序,主方法中有以下代码,确定其中可能出现的异常,进行捕获处理. public class YiChang { public st ...
- JAVA学习中Swing概述中的JFrame学习
package com.swing; import java.awt.Color;import java.awt.Container;import java.awt.event.WindowAdapt ...