触摸与手势学习-swift

触摸是一个UITouch对象,该对象放在一个UIEvent中,每个UIEvent包含一个或多个UITouch对象,每个UITouch对象对应一个手指。系统将UIEvent发送到应用程序上,最后应用程序将UIEvent传递给当前的一个UIView。

触摸分为5个阶段:

1)Began

2)Moved

3)Stationary

4)Ended

5)Cancelled(比如收到电话)

//触摸事件
    
    //手指首次触摸到屏幕
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        print("touchesBegan")
        
        //获取touches数量
        let numTouches = touches.count
        
        //获取点击屏幕的次数
        let tapTouches = (touches as NSSet).anyObject()?.tapCount
        
        //获取事件发生时间
        let timestamp = event!.timestamp
        
        //获取当前相对于self.view的坐标
        let locationPoint = (touches as NSSet).anyObject()?.locationInView(self.view)
        
        //获取上一次相对于self.view的坐标
        let previousPoint = (touches as NSSet).anyObject()?.previousLocationInView(self.view)
        
        //允许使用手势
        self.view.userInteractionEnabled = true
        
        //支持多点触摸
        self.view.multipleTouchEnabled = true
        
        print("(tapTouches)")
        
        
        //判断如果有两个触摸点
        if touches.count == 2
        {
            //获取触摸集合
            let twoTouches = (touches as NSSet).allObjects
            
            //获取触摸数组
            let first:UITouch = twoTouches[0] as! UITouch //第1个触摸点
            let second:UITouch = twoTouches[1]as! UITouch //第2个触摸点
            
            //获取第1个点相对于self.view的坐标
            let firstPoint:CGPoint = first.locationInView(self.view)
            
            //获取第1个点相对于self.view的坐标
            let secondPoint:CGPoint = second.locationInView(self.view)
            
            //计算两点之间的距离
            let deltaX = secondPoint.x - firstPoint.x;
            let deltaY = secondPoint.y - firstPoint.y;
            let initialDistance = sqrt(deltaX*deltaX + deltaY*deltaY )
            
            print("两点间距离是:(initialDistance)")
        }
    }
    
    //手指在移动
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        print("touchesMoved")
    }
    
    //触摸结束
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        print("touchesEnded")
    }
    
    //触摸意外终止
    //模拟器演示:鼠标拖动的同时,按键盘command+shift+h 相当于点击手机home键,退出应用,触发touchesCancelled事件,在打电话、等情况下也会触发
    override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
        
        print("touchesCancelled")
    }

手势UIGestureRecognizer:

UITapGestureRecognizer

UIPanGestureRecognizer

UILongPressGestureRecognizer

UIPinchGestureRecognizer

UISwipeGestureRecognizer

 1        //点击事件
 2         let atap = UITapGestureRecognizer(target: self, action: "tapDo:")
 3         self.view.addGestureRecognizer(atap)
 4         atap.numberOfTapsRequired = 1 //单击次数
 5         atap.numberOfTouchesRequired = 1 //手指个数
 6         
 7         //拖动事件
 8         let aPan = UIPanGestureRecognizer(target: self, action: "handlenPan:")
 9         self.view.addGestureRecognizer(aPan)
10         aPan.minimumNumberOfTouches = 1 //最少手指个数
11         aPan.maximumNumberOfTouches = 3 //最多手指个数
12         
13         //长按事件
14         let aLongPress = UILongPressGestureRecognizer(target: self, action: "longPress:")
15         self.view.addGestureRecognizer(aLongPress)
16         aLongPress.minimumPressDuration = 1 //需要长按的时间,最小0.5s
17         
18         //捏合事件
19         let aPinch = UIPinchGestureRecognizer(target: self, action: "pinchDo:")
20         self.view.addGestureRecognizer(aPinch)
21         
22         //旋转事件
23         let aRotation = UIRotationGestureRecognizer(target: self, action: "rotatePiece:")
24         self.view.addGestureRecognizer(aRotation)
25         
26         //轻扫事件--左轻扫
27         let leftSwipe = UISwipeGestureRecognizer(target: self, action: "leftSwipe:")
28         self.view.addGestureRecognizer(leftSwipe)
29         leftSwipe.direction =  UISwipeGestureRecognizerDirection.Left
30         
31         //轻扫事件--右轻扫
32         let rightSwipe = UISwipeGestureRecognizer(target: self, action: "rightSwipe:")
33         self.view.addGestureRecognizer(rightSwipe)
34         rightSwipe.direction =  UISwipeGestureRecognizerDirection.Right
35         
36         //轻扫事件--上轻扫
37         let upSwipe = UISwipeGestureRecognizer(target: self, action: "upSwipe:")
38         self.view.addGestureRecognizer(upSwipe)
39         upSwipe.direction =  UISwipeGestureRecognizerDirection.Up
40         
41         //轻扫事件--下轻扫
42         let downSwipe = UISwipeGestureRecognizer(target: self, action: "downSwipe:")
43         self.view.addGestureRecognizer(downSwipe)
44         downSwipe.direction =  UISwipeGestureRecognizerDirection.Down
 1 //手势
 2     
 3     //点击事件
 4     func tapDo(sender:UITapGestureRecognizer)
 5     {
 6         
 7         print("点击事件")
 8     }
 9     
10     //拖动事件
11     func handlenPan(sender:UIPanGestureRecognizer)
12     {
13         print("拖动事件")
14         
15         if sender.state == .Began
16         {
17             //拖动开始
18         }
19         else if sender.state == .Changed
20         {
21             //拖动过程
22         }
23         else if sender.state == .Ended
24         {
25             //拖动结束
26         }
27     }
28     
29     //长摁事件
30     func longPress(sender:UILongPressGestureRecognizer)
31     {
32         print("长摁事件")
33         
34         
35     }
36     
37     //捏合事件
38     func pinchDo(sender:UIPinchGestureRecognizer)
39     {
40         print("捏合")
41     }
42     
43     //旋转事件
44     func rotatePiece(sender:UIRotationGestureRecognizer)
45     {
46         print("旋转")
47     }
48     
49     
50     //轻扫事件--左轻扫
51     func leftSwipe(sender:UISwipeGestureRecognizer)
52     {
53         print("左轻扫")
54     }
55     
56     //轻扫事件--右轻扫
57     func rightSwipe(sender:UISwipeGestureRecognizer)
58     {
59         print("右轻扫")
60     }
61     
62     //轻扫事件--上轻扫
63     func upSwipe(sender:UISwipeGestureRecognizer)
64     {
65         print("上轻扫")
66     }
67     
68     //轻扫事件--下轻扫
69     func downSwipe(sender:UISwipeGestureRecognizer)
70     {
71         print("下轻扫")
72     }
73     

 

原文地址:https://www.cnblogs.com/fengmin/p/5713562.html