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)
}
}
}
==================================
ios webView 同时添加单击和长按手势 (遵循多手势并发,从而解决webView上的tap手势添加不上的bug)
//////UIGestureRecognizerDelegate
// 单击的 Recognizer
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapToDo)];
tap.delegate = self;
[theWebView addGestureRecognizer:tap];
//长按
UILongPressGestureRecognizer * longPressGr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressToDo)];
longPressGr.minimumPressDuration = 1.0;
longPressGr.delegate = self;
[theWebView addGestureRecognizer:longPressGr];
// 如果长按确定偵測失败才會触发单击
[tap requireGestureRecognizerToFail:longPressGr];
webView添加tap手势无效果
webView中已经内部集成了点击、滑动等手势,当我们自己新建了一个tap手势,设置代理,添加手势后,仍需要实现允许多个手势并发的代理方法,代码如下:
// 允许多个手势并发
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}