UIGestureRecognizer有许多子类,用于监听一些常见的手势事件,这些子类主要有:

1,UISwipeGestureRecognizer:滑动(快速移动)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class ViewController: UIViewController {
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        var swipe = UISwipeGestureRecognizer(target:self, action:Selector("swipe:"))
        swipe.direction = UISwipeGestureRecognizerDirection.Up
        self.view.addGestureRecognizer(swipe)
    }
     
    func swipe(recognizer:UISwipeGestureRecognizer){
        println("swipe ok")
        var point=recognizer.locationInView(self.view)
        //这个点是滑动的起点
        println(point.x)
        println(point.y)
    }
}
注意1:如果UISwipeGestureRecognizer在不指定方向的时候,默认向右滑动才会触发事件。如果要指定方向,需要设置direction属性
1
2
//表示监听滑动的方向为向上
swipe.direction = UISwipeGestureRecognizerDirection.Up
注意2:有网友问如果各个方向都要响应怎么办,只要多定义几个UISwipeGestureRecognizer就可以了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class ViewController: UIViewController {
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        var swipeUp = UISwipeGestureRecognizer(target:self, action:Selector("swipe:"))
        swipeUp.direction = UISwipeGestureRecognizerDirection.Up
        self.view.addGestureRecognizer(swipeUp)
         
        var swipeDown = UISwipeGestureRecognizer(target:self, action:Selector("swipe:"))
        swipeDown.direction = UISwipeGestureRecognizerDirection.Down
        self.view.addGestureRecognizer(swipeDown)
    }
     
    func swipe(recognizer:UISwipeGestureRecognizer){
        if recognizer.direction == UISwipeGestureRecognizerDirection.Up{
            println("向上滑动")
        }else if recognizer.direction == UISwipeGestureRecognizerDirection.Down{
            println("向下滑动")
        }
         
        var point=recognizer.locationInView(self.view)
        //这个点是滑动的起点
        println(point.x)
        println(point.y)
    }
}

2,UITapGestureRecognizer:轻点手势(点击)
(1)可以通过numberOfTouchesRequired属性设置触摸点数,比如设置2表示必须两个手指触摸时才会触发
(2)通过numberOfTapsRequired属性设置点击次数,单击设置为1,双击设置为2
(3)如果一个控件既监听了单击事件也监听了双击事件,默认当双击事件触发的时候也同时会触发单击事件。如果想双击时不触发单击,需要通过requireGestureRecognizerToFail进行设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class ViewController: UIViewController {
         
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //单击监听
        var tapSingle=UITapGestureRecognizer(target:self,action:"tapSingleDid")
        tapSingle.numberOfTapsRequired=1
        tapSingle.numberOfTouchesRequired=1
        //双击监听
        var tapDouble=UITapGestureRecognizer(target:self,action:"tapDoubleDid:")
        tapDouble.numberOfTapsRequired=2
        tapDouble.numberOfTouchesRequired=1
        //声明点击事件需要双击事件检测失败后才会执行
        tapSingle.requireGestureRecognizerToFail(tapDouble);
        self.view.addGestureRecognizer(tapSingle)
        self.view.addGestureRecognizer(tapDouble)
    }
       
    func tapSingleDid(){
        println("单击了")
    }
     
    func tapDoubleDid(sender:UITapGestureRecognizer){
        if sender.view == self.view{
                println("双击了")
        }
    }   
}

3,UIPinchGestureRecognizer:捏合手势(两个手指进行放大缩小)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ViewController: UIViewController {   
         
    override func viewDidLoad() {
        super.viewDidLoad()
         
        //设置监听方法为pinchDid方法
        var pinch=UIPinchGestureRecognizer(target:self,action:"pinchDid:")
        self.view.addGestureRecognizer(pinch)
         
         
    }
    func pinchDid(recognizer:UIPinchGestureRecognizer)
    {
        //在监听方法中可以实时获得捏合的比例
        println(recognizer.scale);
    }
}

4,UIRotationGestureRecognizer:旋转手势(两个手指进行旋转)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class ViewController: UIViewController {
 
    override func viewDidLoad() {
        super.viewDidLoad()
       
        var rotation=UIRotationGestureRecognizer(target:self,action:"rotationDid:")
        self.view.addGestureRecognizer(rotation)
    }
   
    func rotationDid(recognizer:UIRotationGestureRecognizer){
        //旋转的弧度转换为角度
        println(recognizer.rotation*(180/CGFloat(M_PI)))
    }
}

5,UIPanGestureRecognizer:拖动手势

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class ViewController: UIViewController {
     
    var rect:UIView!
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        rect=UIView(frame:CGRectMake(0, 0, 100, 100))
        rect.center=self.view.center
        rect.backgroundColor=UIColor.redColor()
        self.view.addSubview(rect)
         
        var pan = UIPanGestureRecognizer(target:self,action:"panDid:")
        pan.maximumNumberOfTouches=1
        rect.addGestureRecognizer(pan)
    }
        
    func panDid(recognizer:UISwipeGestureRecognizer){
        var point=recognizer.locationInView(self.view)
        //设置矩形的位置
        rect.center=point
    }
}

6,UILongPressGestureRecognizer:长按

Swift - 各种手势检测大全(UIGestureRecognizer及其子类)的更多相关文章

  1. swift - 各种手势用法大全

    UIGestureRecognizer有许多子类,用于监听一些常见的手势事件,这些子类主要有: 1.首先创建几个view,来用于手势的检测 let view1 = UIView() let view2 ...

  2. iOS 手势识别器(UIGestureRecognizer)

    UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势. UIGestureRecognizer的子类有: UITapGestureRecogni ...

  3. swift 中手势的使用

    swift 中手势的使用 /**点击手势*/ func tapGestureDemo() { //建立手势识别器 let gesture = UITapGestureRecognizer(target ...

  4. iOS8 Core Image In Swift:人脸检测以及马赛克

    iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用 iOS8 Core Image In Swift:更复杂的滤镜 iOS8 Core Image In Swift:人脸 ...

  5. 9.3、Libgdx手势检测

    (官网:www.libgdx.cn) 触摸屏在输入的基础上增加了手势检测,比如两个手指实现缩放,单击或双击屏幕,长按屏幕等. Libgdx提供了GestureDetector来帮助你检测以下手势: t ...

  6. Android 手势检测实战 打造支持缩放平移的图片预览效果(下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图 ...

  7. 看完这篇还不会 GestureDetector 手势检测,我跪搓衣板!

    引言 在 android 开发过程中,我们经常需要对一些手势,如:单击.双击.长按.滑动.缩放等,进行监测.这时也就引出了手势监测的概念,所谓的手势监测,说白了就是对于 GestureDetector ...

  8. UIGestureRecongnizer 手势检测 swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  9. ios的手势操作之UIGestureRecognizer浅析

    转载地址:http://blog.csdn.net/likendsl/article/details/7554150 每一个手势的实现例子,可参考下面网址:http://www.cnblogs.com ...

随机推荐

  1. 华为s5700 添加与删除vlan

    新建vlan 删除vlan ① 检查该VLAN下是否存在成员接口,使用如下命令:display vlan all② 如存在成员接口,则进入该接口视图,删除该成员,否则可略过此步骤,例如:interfa ...

  2. BZOJ 2427: [HAOI2010]软件安装( dp )

    软件构成了一些树和一些环, 对于环我们要不不选, 要么选整个环. 跑tarjan缩点后, 新建个root, 往每个入度为0的点(强连通分量) 连边, 然后跑树dp( 01背包 ) ---------- ...

  3. 【转】java--final

    1.final数据 许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”.常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...

  4. 一个故事讲清楚NIO(转)

    转载请引用:一个故事讲清楚NIO 假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) ...

  5. iOS开发中捕获Crash 发送Bug邮件

    在开发过程中,我们有时候会留下Bug,用户在使用我们的app 的时候,有时会出现闪退,这时候我们可以让用户给我们发送邮件,以让我们开发人员更加快速的地位到Bug的所在,以最快的时间解决,同时也提高用户 ...

  6. ubuntu 安装Opencv2.4.7

    1.安装Cmake: sudo apt-get install cmake 2.到Opencv目录下创建文件夹release $ cmake -D CMAKE_BUILD_TYPE=RELEASE - ...

  7. Swift - 使用NSURLSession加载数据、下载、上传文件

    NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍. 1,使用Data Task加载数据 使用全局的sharedSession()和dataTaskWithR ...

  8. spring中bean的一些知识点

    知识点1: 实例化bean的3种方法. 1.      使用类构造器 (90%用这个方法) 2.      使用静态工厂方法 3.      使用实例化工厂 知识点2: 看这段代码 Applicati ...

  9. 8天玩转并行开发——第二天 Task的使用

    原文 8天玩转并行开发——第二天 Task的使用 在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于 “任务的编程模型”所冲击, ...

  10. 国内使用Google Maps JavaScript API

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="ini ...