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. ExecuteReader: CommandText 属性尚未初始化

    没有对sqlcommand对象的commandtext属性赋值说白了就是没写SQL语句 -.- 无语死了.

  2. 【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位网友补充完善

    链接地址:http://www.tuicool.com/articles/jyA3MrU 时间 2015-01-05 10:08:18  我是程序猿,我为自己代言 原文  http://blog.cs ...

  3. JS 2016-09-30T22:04:27.5220743+08:00 转换为日期

    1.转换代码 new Date(item.CreatedDate).Format("yyyy-MM-dd hh:mm") 2.需要拓展的方法 // 对Date的扩展,将 Date ...

  4. ARM相关知识

    ARM7采用冯·诺依曼(Von-Neumann)结构,数据存储器和程序存储器重合在一起.    同时,此结构也被大多数计算机所采用. ARM7为三级流水线结构(取指,译码,执行),平均功耗为0.6mW ...

  5. webservice asmx 无法序列化接口 System.Collections.Generic.IList

    转载自:http://www.cnblogs.com/chenhuzi/p/4178194.html 今天有位同事在方法里加了一个IList<entity> 的返回值,也没有测试,直接发布 ...

  6. 在Web Api中快速实现JSonp

    本文翻译自:http://www.codeproject.com/Tips/631685/JSONP-in-ASP-NET-Web-API-Quick-Get-Started Concept: 同源策 ...

  7. ios9怎么设置6位密码 ios9设置6位密码图文教程

    在原来的 iOS 系统中,只有四位数字密码与复杂密码之分,而在 iOS9 系统中却多出了一个六位数字密码,那ios9怎么设置6位密码,今天小编就为大家带来ios9设置6位密码图文教程   在原来的 i ...

  8. Linux内核源代码解析之——sock's buffer参数

    本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/11539695 关于socket与sock的关系再简单 ...

  9. jquery 获取 TABLE单元格的值

    1.JQ部分: var tds = $("#table1 td"); tds.click(function(){ //给所有td添加点击事件        var tdSeq = ...

  10. ASP.NET、WinForm、C# - 配置文件信息读取 [ Web.config || Appconfig ]

    <configuration> <appSettings> <add key="name" value="HF_Ultrastrong&qu ...