Swift - 各种手势检测大全(UIGestureRecognizer及其子类)
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语言
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2014-09-25 Android 出现警告Exported service does not require permission
2013-09-25 Android中的JSON详细总结