Swift 4, передавая направление UISwipeGestureRecognizer в функцию-обработчик - PullRequest
0 голосов
/ 08 июня 2018

У меня есть представление, в котором есть распознаватель пролистывания, который отправляет его в функцию 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
        }
    }

Как бы я поступил так?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете использовать 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
        }
    }

Примечание Оба одинаковы, просто зависит от вашего требования

0 голосов
/ 08 июня 2018

вам нужно создать два отдельных жеста для каждого события свайпа, причина фактически работает в одном событии, например,

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
    }

}
...