Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 检测方向滑动的UISweepGestureRecognitor_Swift_Uigesturerecognizer - Fatal编程技术网

Swift 检测方向滑动的UISweepGestureRecognitor

Swift 检测方向滑动的UISweepGestureRecognitor,swift,uigesturerecognizer,Swift,Uigesturerecognizer,为了方便起见,我创建了一个uisweegestureerecognizer,允许用户调用代码中的相同操作向左和向右滑动。 我想知道是否有可能检测到用户在其动作中滑动的实际方向。我发现这已经讨论了这个问题,但Swift可能有所改变。在@LinusGeffarth上重申这是我能想到的最好的解决方案 import UIKit class SwipeUTIL { static func addSwipe(selfVC: UIViewController) { let swipe

为了方便起见,我创建了一个
uisweegestureerecognizer
,允许用户调用代码中的相同操作向左和向右滑动。

我想知道是否有可能检测到用户在其动作中滑动的实际方向。我发现这已经讨论了这个问题,但Swift可能有所改变。

在@LinusGeffarth上重申这是我能想到的最好的解决方案

import UIKit

class SwipeUTIL {
    static func addSwipe(selfVC: UIViewController) {
        let swipeLeft = UISwipeGestureRecognizer(target: selfVC, action: #selector(selfVC.didSwipe))
        let swipeRight =  UISwipeGestureRecognizer(target: selfVC, action: #selector(selfVC.didSwipe))

        swipeLeft.direction = .left
        swipeRight.direction = .right

        selfVC.view!.addGestureRecognizer(swipeRight)
        selfVC.view!.addGestureRecognizer(swipeLeft)
    }

}

extension UIViewController {
    internal func didSwipe(swipe: UISwipeGestureRecognizer, completion: (@escaping(UISwipeGestureRecognizerDirection) -> Void)) {
        completion(swipe.direction)
    }
}
在视图控制器中

 override func viewDidLoad() {
        super.viewDidLoad()
        SwipeUTIL.addSwipe(selfVC: self)
    }

    override func didSwipe(swipe: UISwipeGestureRecognizer, completion: @escaping ((_ swipedir: UISwipeGestureRecognizerDirection) -> Void)) {
        print(swipe.direction)
    }

在@LinusGeffarth上重申这是我能想到的最好的解决方案

import UIKit

class SwipeUTIL {
    static func addSwipe(selfVC: UIViewController) {
        let swipeLeft = UISwipeGestureRecognizer(target: selfVC, action: #selector(selfVC.didSwipe))
        let swipeRight =  UISwipeGestureRecognizer(target: selfVC, action: #selector(selfVC.didSwipe))

        swipeLeft.direction = .left
        swipeRight.direction = .right

        selfVC.view!.addGestureRecognizer(swipeRight)
        selfVC.view!.addGestureRecognizer(swipeLeft)
    }

}

extension UIViewController {
    internal func didSwipe(swipe: UISwipeGestureRecognizer, completion: (@escaping(UISwipeGestureRecognizerDirection) -> Void)) {
        completion(swipe.direction)
    }
}
在视图控制器中

 override func viewDidLoad() {
        super.viewDidLoad()
        SwipeUTIL.addSwipe(selfVC: self)
    }

    override func didSwipe(swipe: UISwipeGestureRecognizer, completion: @escaping ((_ swipedir: UISwipeGestureRecognizerDirection) -> Void)) {
        print(swipe.direction)
    }

1) 我用代码创建了它,无论是使用故事板还是通过代码设置,都没有区别。2)
.direction
仅返回用户可以滑动的允许方向,而不是滑动的方向。如我在问题中所述,我正在寻找一种方法,使用单个滑动手势识别器检测滑动的方向,而不是创建4个单独的识别器。@Fallah OP已经知道这个答案,因为它包含在他已经研究过的链接中。1)我在代码中创建了它,无论您是使用故事板还是通过代码设置它都没有区别。2)
.direction
仅返回用户可以滑动的允许方向,而不是滑动的方向。如我在问题中所述,我正在寻找一种方法,使用单个滑动手势识别器检测滑动的方向,而不是创建4个单独的识别器。@Fallah OP已经知道这个答案,因为它包含在他已经查看过的链接中。可能不是您正在寻找的答案,但截至2017年6月16日,在能够通过单个刷卡识别器从中检测所有刷卡方向方面,没有任何变化。只需在不同方向创建4个手势,然后将它们链接到同一个选择器。嗯,这样的不便,太痛苦了!哈我会把这个问题留待讨论,以防有人提出一些很棒的解决方案。无论如何谢谢你!我的意思是,如果你真的想,你可以扩展滑动手势识别器。UISweepGestureRecognizer继承了位置和其他视图属性,您可以使用这些属性执行一些计算并尝试预测方向。但是你真的很讨厌创建四个滑动手势识别器来实现这一点:)是的,我也想到了。我只是在寻找一些已经实现的东西,因为我经常自己写一些东西,而不知道它已经被苹果预先构建好了。我可能会创建第二个识别器。非常感谢。可能不是你想要的答案,但截至2017年6月16日,在能够通过单个刷卡识别器从中检测所有刷卡方向方面,没有任何变化。只需在不同方向创建4个手势,然后将它们链接到同一个选择器。嗯,这样的不便,太痛苦了!哈我会把这个问题留待讨论,以防有人提出一些很棒的解决方案。无论如何谢谢你!我的意思是,如果你真的想,你可以扩展滑动手势识别器。UISweepGestureRecognizer继承了位置和其他视图属性,您可以使用这些属性执行一些计算并尝试预测方向。但是你真的很讨厌创建四个滑动手势识别器来实现这一点:)是的,我也想到了。我只是在寻找一些已经实现的东西,因为我经常自己写一些东西,而不知道它已经被苹果预先构建好了。我可能会创建第二个识别器。非常感谢。