您的位置:首页 > 移动开发 > Swift

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

2016-01-22 14:11 471 查看


[objc]
view
plain copy

print?





//

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

}

}

}

注意:滑动手势和拖手势冲突,两个选一个测试,至于测试的效果自己新建一个工程来把代码加入就行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: