博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS多点触控与手势识别
阅读量:7173 次
发布时间:2019-06-29

本文共 7151 字,大约阅读时间需要 23 分钟。

hot3.png

0 解析关于手势操作事件

1>UI时间分类

(1)touch:各种手势

(2)motion:例如到传感器,例如摇晃

(3)Remote control:利用外部设备,例如插入耳机

2>Touch事件阶段

touch begin --> touch move --> touch end --> touch cancel

多指手势流程:

172318_cGKV_2346786.jpg

3>Recognize UIView ViewController的关系

172509_FR5o_2346786.png172510_CRby_2346786.jpg

 

点击-UITapGestureRecognizer

    override func viewDidLoad() {        super.viewDidLoad()                       let rect=CGRect(x:80,y:200,width:200,height:200);        var view1 = UIView(frame: rect)        view1.backgroundColor = UIColor.redColor()        self.view.addSubview(view1)                //1,建立手势识别器        var gesture = UITapGestureRecognizer(target: self, action: "viewAction:")#warning 如果想要识别器能够识别多种触控,例如1点和2点,那就要建立2个UITapGestureRecognizer        gesture.numberOfTapsRequired = 2    //点击次数       // gesture.numberOfTouchesRequired = 2 //多点触摸                //2,关联识别器到视图        view1.addGestureRecognizer(gesture)            }    //3,手势引用的动作    func viewAction(sender:UITapGestureRecognizer){        //获得点击处的位置        var point:CGPoint = sender.locationInView(self.view)        println("\(point)")        println("clicked")    }

放大缩放UIPinchGestureRecognizer

    override func viewDidLoad() {        super.viewDidLoad()                //1,建立手势识别器        var gesture = UIPinchGestureRecognizer(target: self, action: "viewAction:")                //2,关联识别器到视图        view1.addGestureRecognizer(gesture)            }    //3,手势引用的动作    func viewAction(sender:UIPinchGestureRecognizer){                var _height = view1.bounds.height        var _width  = view1.bounds.width               view1.bounds.size = CGSize(width: _width * sender.scale,                                        height: _height * sender.scale)    }

旋转UIRotationGestureRecognizer

  override func viewDidLoad() {        super.viewDidLoad()                //1,建立手势识别器        var gesture = UIRotationGestureRecognizer(target: self, action: "viewAction:")                //2,关联识别器到视图        view1.addGestureRecognizer(gesture)            }    //3,手势引用的动作    func viewAction(sender:UIRotationGestureRecognizer){              view1.transform = CGAffineTransformMakeRotation(sender.rotation)    }

4 滑动UISwipeGestureRecognizer

 var offsetX:CGFloat = 0.0  override func viewDidLoad() {        super.viewDidLoad()                //1,建立手势识别器        var gesture = UISwipeGestureRecognizer(target: self, action: "viewAction:")         //设置多指        gesture.numberOfTouchesRequired = 2;        //2,关联识别器到视图        view1.UISwipeGestureRecognizer(gesture)            }    //3,手势引用的动作    func viewAction(sender:UISwipeGestureRecognizer){                offsetX += 20.0        //方向属性        if(sender.direction == UISwipeGestureRecognizerDirection.Right){                        view1.transform = CGAffineTransformMakeTranslation(offsetX, 0)        }    }

5  平移UIPanGestureRecognizer

  override func viewDidLoad() {        super.viewDidLoad()                var gesture = UIPanGestureRecognizer(target: self, action: "view1Tap:")                //支持的多指范围        gesture.minimumNumberOfTouches = 1;        gesture.maximumNumberOfTouches = 2;                view1.addGestureRecognizer(gesture)    }    //3,手势引用的动作    func viewAction(sender:UIPanGestureRecognizer){                //相对于view1视图偏移的位置        var _transX = sender.translationInView(view1).x        var _transY = sender.translationInView(view1).y                view1.transform = CGAffineTransformMakeTranslation(_transX, _transY)    }

长按UILongPressGestureRecognizer

  override func viewDidLoad() {        super.viewDidLoad()                var gesture = UILongPressGestureRecognizer(target: self, action: "view1Tap:")                //需要的点数和点击次数       // gesture.numberOfTouchesRequired       // gesture.numberOfTapsRequired                //最短长按时间        gesture.minimumPressDuration = 1                //运行移动的点数,在这个范围内不发生动作。默认是10        gesture.allowableMovement = 10                view1.addGestureRecognizer(gesture)    }    //3,手势引用的动作    func viewAction(sender:UILongPressGestureRecognizer){                UIAlertView(title: "longpress", message: "你长按了", delegate: self, cancelButtonTitle: "确定").show()            }        //2.获取手势的view的坐标点        CGPoint location = [recognizer locationInView:recognizer.view];          //3.判断点是否在rect范围    BOOL isyes = CGRectContainsPoint(btn.frame, location);

UIScreenEdgePanGestureRecognizer

class UIScreenEdgePanGestureRecognizer : UIPanGestureRecognizer {    var edges: UIRectEdge //< The edges on which this gesture recognizes, relative to the current interface orientation}是pan的子类,从边缘出来

8 自定义手势

////  UICustomGestureRecognizer.swift//  ttt////  Created by ling on 15/8/26.//  Copyright (c) 2015年 ling. All rights reserved.//import UIKitimport UIKit.UIGestureRecognizerSubclassclass UICustomGestureRecognizer: UIGestureRecognizer {           var leftTop = false    var rightBttom = false        //初始化    override init(target: AnyObject, action: Selector) {       super.init(target: target, action: action)    }            override func touchesBegan(touches: Set
!, withEvent event: UIEvent!) {        return    }        override func touchesMoved(touches: Set
!, withEvent event: UIEvent!) {                var myTouch = (touches as NSSet).anyObject() as! UITouch        var myLocation = myTouch.locationInView(self.view)                if(myLocation.x < 10 && myLocation.y < 10){            leftTop = true;        }                if((myLocation.x + 10) > self.view?.bounds.width && (myLocation.y + 10) > self.view?.bounds.height){            rightBttom = true        }                if(leftTop && rightBttom){            self.state = UIGestureRecognizerState.Ended        }                println("\(myLocation)")            }        override func touchesEnded(touches: Set
!, withEvent event: UIEvent!) {                self.reset()            }        override func touchesCancelled(touches: Set
!, withEvent event: UIEvent!) {        return    }    }////  UICustomGestureRecognizer.swift//  ttt////  Created by ling on 15/8/26.//  Copyright (c) 2015年 ling. All rights reserved.//import UIKitimport UIKit.UIGestureRecognizerSubclassclass UICustomGestureRecognizer: UIGestureRecognizer {           var leftTop = false    var rightBttom = false        //初始化    override init(target: AnyObject, action: Selector) {       super.init(target: target, action: action)    }            override func touchesBegan(touches: Set
!, withEvent event: UIEvent!) {        return    }        override func touchesMoved(touches: Set
!, withEvent event: UIEvent!) {                var myTouch = (touches as NSSet).anyObject() as! UITouch        var myLocation = myTouch.locationInView(self.view)                if(myLocation.x < 10 && myLocation.y < 10){            leftTop = true;        }                if((myLocation.x + 10) > self.view?.bounds.width && (myLocation.y + 10) > self.view?.bounds.height){            rightBttom = true        }                if(leftTop && rightBttom){            self.state = UIGestureRecognizerState.Ended        }                println("\(myLocation)")            }        override func touchesEnded(touches: Set
!, withEvent event: UIEvent!) {                self.reset()            }        override func touchesCancelled(touches: Set
!, withEvent event: UIEvent!) {        return    }    }

转载于:https://my.oschina.net/u/2346786/blog/497271

你可能感兴趣的文章
@Html.Raw()
查看>>
ES6 Proxy
查看>>
图的基本算法(BFS和DFS)
查看>>
Linux时区详解
查看>>
61.node.js开发错误——Error: Connection strategy not found
查看>>
算法逆向第一篇——简单算法逆向
查看>>
机房收费系统数据库概念结构设计
查看>>
NanoJIT
查看>>
一个最简单GAL游戏资源文件黑盒分析(二)
查看>>
SQL Server 2005允许远程连接的配置说明
查看>>
HQL 语句
查看>>
用实现ajax读博客rss示例代码
查看>>
MVC验证12-使用DataAnnotationsExtensions对整型、邮件、最小值、文件类型、Url地址等验证...
查看>>
hdu1962Corporative Network带权回路
查看>>
全神贯注!聚精会神!一心一意!
查看>>
IBATIS事务处理 - - 博客频道 - CSDN.NET
查看>>
编程算法基础-数字数码管-隐藏password
查看>>
C++ - new与malloc的差别
查看>>
使用Html和ashx文件实现其简单的注册页面
查看>>
ZeroMQ接口函数之 :zmq_inproc – ØMQ 本地进程内(线程间)传输方式
查看>>