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:长按