zoukankan      html  css  js  c++  java
  • Swift

    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]LeetCode462. 最少移动次数使数组元素相等 II | Minimum Moves to Equal Array Elements II
    [Swift]LeetCode458. 可怜的小猪 | Poor Pigs
    [Swift]数组排序:sort和sorted
    2013年总结(0)-序
    2013年总结(0)-序
    互联网日志的种类、存储和计算
    互联网日志的种类、存储和计算
    第一次当面试官
    第一次当面试官
    JS实践与写博客-序
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4838187.html
Copyright © 2011-2022 走看看