【问题标题】:Swift 4, passing UISwipeGestureRecognizer direction to the handler functionSwift 4,将 UISwipeGestureRecognizer 方向传递给处理函数
【发布时间】:2018-06-08 12:47:51
【问题描述】:

我有一个视图,它有一个滑动识别器,可以将它发送到 moveToNextItem 函数:

let swipe = UISwipeGestureRecognizer(target: self, action: #selector(moveToNextItem))     
swipe.direction = [.left, .right]
playCardView.addGestureRecognizer(swipe)

目前 moveToNextItem 函数只处理相同的左右滑动:

@objc func moveToNextItem() {
    //Moves to next item
}

将用户滑动到该函数的方向传递给该函数以便它可以向左或向右移动的正确方法是什么。我可以创建 2 个函数(一个用于左侧,一个用于右侧),但这似乎是一种不好的方法。我只想将方向传递给函数,让函数发生什么。也许在某种程度上,该功能可以打开方向?像这样的:

@objc func moveToNextItem() {
        switch direction{
        case .left:
             //left swipe action
        case .right:
             //right swipe action
        default: //default
        }
    }

我该怎么做呢?

【问题讨论】:

    标签: swift uigesturerecognizer swipe


    【解决方案1】:

    您需要为每个滑动事件创建两个单独的手势,原因实际上是在单个事件中起作用,例如

    override func viewDidLoad() {
    super.viewDidLoad()
    
    let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(moveToNextItem(_:)))
    let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(moveToNextItem(_:)))
    
    leftSwipe.direction = .left
    rightSwipe.direction = .right
    
    playCardView.addGestureRecognizer(leftSwipe)
    playCardView.addGestureRecognizer(rightSwipe)
    }
    

    当检测到手势时调用 moveToNextItem 方法,实现该方法。

    @objc func moveToNextItem(_ sender:UISwipeGestureRecognizer) {
    
       switch sender.direction{
        case .left:
             //left swipe action
        case .right:
             //right swipe action
        default: //default
        }
    
    }
    

    【讨论】:

    • 谢谢,这就是我要找的。我只是无法正确使用语法。
    【解决方案2】:

    你可以使用to方法

    第一种方法

    /// My Gesture For Multiple DIrection
    private var mySwipeGesturec: UISwipeGestureRecognizer?
    
    /// Directions Array
    let directionsArray: [UISwipeGestureRecognizerDirection] = [.right, .left]
    /// Create For Loop
    for currentDirection in directionsArray {
         mySwipeGesturec = UISwipeGestureRecognizer()
         mySwipeGesturec = UISwipeGestureRecognizer(target: self, action: #selector(onScreenCodes.swipeHandler(_:)))
         mySwipeGesturec?.direction = currentDirection
         self.view.addGestureRecognizer(mySwipeGesturec!)
    }
    
    @objc func swipeHandler(_ sender: UISwipeGestureRecognizer){
            switch sender.direction {
            case .left:
                print("Left Swipe")
            case .right:
                print("Right Swipe")
            default:
                break
            }
        }
    

    第二种方法

    private var leftSwipeGesture : UISwipeGestureRecognizer?
    private var rightSwipeGesture : UISwipeGestureRecognizer?
    
    
    leftSwipeGesture = UISwipeGestureRecognizer()
    leftSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(onScreenCodes.swipeHandler(_:)))
    leftSwipeGesture?.direction = .left
    self.view.addGestureRecognizer(leftSwipeGesture!)
    
    rightSwipeGesture = UISwipeGestureRecognizer()
    rightSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(onScreenCodes.swipeHandler(_:)))
    rightSwipeGesture?.direction = .right
    self.view.addGestureRecognizer(rightSwipeGesture!)
    
    
    @objc func swipeHandler(_ sender: UISwipeGestureRecognizer){
            switch sender.direction {
            case .left:
                print("Left Swipe")
            case .right:
                print("Right Swipe")
            default:
                break
            }
        }
    

    注意两者相同,只是取决于您的要求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-02-28
      • 1970-01-01
      相关资源
      最近更新 更多