Как распознать пролистывание во всех 4 направлениях

Мне нужно использовать движение пальцем, чтобы распознать жест смахивания вниз, а затем вправо. Но на быстром UISwipeGestureRecognizer предопределено правильное направление.. И я не знаю, как сделать это для использования в других направлениях..

22 ответа

Решение

Вам нужно иметь один UISwipeGestureRecognizer для каждого направления. Это немного странно, потому что UISwipeGestureRecognizer.direction Свойство является битовой маской в ​​стиле параметров, но каждый распознаватель может обрабатывать только одно направление. Вы можете отправить их все в один и тот же обработчик, если хотите, и отсортировать их там, или отправить их различным обработчикам. Вот одна из реализаций:

override func viewDidLoad() {
    super.viewDidLoad()

    var swipeRight = UISwipeGestureRecognizer(target: self, action: "respondToSwipeGesture:")
    swipeRight.direction = UISwipeGestureRecognizerDirection.Right
    self.view.addGestureRecognizer(swipeRight)

    var swipeDown = UISwipeGestureRecognizer(target: self, action: "respondToSwipeGesture:")
    swipeDown.direction = UISwipeGestureRecognizerDirection.Down
    self.view.addGestureRecognizer(swipeDown)
}

func respondToSwipeGesture(gesture: UIGestureRecognizer) {

    if let swipeGesture = gesture as? UISwipeGestureRecognizer {


        switch swipeGesture.direction {
            case UISwipeGestureRecognizerDirection.Right:
                print("Swiped right")
            case UISwipeGestureRecognizerDirection.Down:
                print("Swiped down")
            case UISwipeGestureRecognizerDirection.Left:
                print("Swiped left")
            case UISwipeGestureRecognizerDirection.Up:
                print("Swiped up")
            default:
                break
        }
    }
}

Свифт 3:

override func viewDidLoad() {
    super.viewDidLoad()

    let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
    swipeRight.direction = UISwipeGestureRecognizerDirection.right
    self.view.addGestureRecognizer(swipeRight)

    let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
    swipeDown.direction = UISwipeGestureRecognizerDirection.down
    self.view.addGestureRecognizer(swipeDown)
}

func respondToSwipeGesture(gesture: UIGestureRecognizer) {
    if let swipeGesture = gesture as? UISwipeGestureRecognizer {
        switch swipeGesture.direction {
        case UISwipeGestureRecognizerDirection.right:
            print("Swiped right")
        case UISwipeGestureRecognizerDirection.down:
            print("Swiped down")
        case UISwipeGestureRecognizerDirection.left:
            print("Swiped left")
        case UISwipeGestureRecognizerDirection.up:
            print("Swiped up")
        default:
            break
        }
    }
}

Я просто хотел внести свой вклад, выглядит более элегантно в конце:

func addSwipe() {
    let directions: [UISwipeGestureRecognizerDirection] = [.Right, .Left, .Up, .Down]
    for direction in directions {
        let gesture = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipe:"))
        gesture.direction = direction
        self.addGestureRecognizer(gesture)
    }
}

func handleSwipe(sender: UISwipeGestureRecognizer) {
    print(sender.direction)
}

Из раскадровки:

  1. Добавьте к вашему виду четыре распознавателя жестов.
  2. Установите каждый с целевым направлением от инспектора атрибута. Вы можете выбрать вправо, влево, вверх или вниз
  3. Один за другим выберите распознаватель жестов смахивания, удерживая клавишу Ctrl + перетащите на контроллер вида. Вставьте имя (скажем, leftGesture, rightGesture, upGesture и downGesture), измените соединение на: Действие и введите: UISwipeGestureRecognizer

С вашего viewController:

@IBAction func rightGesture(sender: UISwipeGestureRecognizer) {
    print ("Right")
}
@IBAction func leftGesture(sender: UISwipeGestureRecognizer) {
    print ("Left")
}
@IBAction func upGesture(sender: UISwipeGestureRecognizer) {
    print = ("Up")
}

@IBAction func downGesture(sender: UISwipeGestureRecognizer) {
    print ("Down")
}  

Похоже, за последнее время все изменилось. В XCode 7.2 работает следующий подход:

override func viewDidLoad() {
    super.viewDidLoad()

    let swipeGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipe:")
    swipeGesture.direction = [.Down, .Up]
    self.view.addGestureRecognizer(swipeGesture)
}

func handleSwipe(sender: UISwipeGestureRecognizer) {
    print(sender.direction)
}

Протестировано в Симуляторе на iOS 8.4 и 9.2 и на реальном устройстве на 9.2.

Или, используя удобное расширение mlcollard здесь:

let swipeGesture = UISwipeGestureRecognizer() {
    print("Gesture recognized !")
}

swipeGesture.direction = [.Down, .Up]
self.view.addGestureRecognizer(swipeGesture)

Apple Swift версии 3.1 - Xcode версии 8.3 (8E162)

Удобный путь от подхода Александра Кассана

let directions: [UISwipeGestureRecognizerDirection] = [.up, .down, .right, .left]
for direction in directions {
    let gesture = UISwipeGestureRecognizer(target: self, action: #selector(YourClassName.handleSwipe(gesture:)))
    gesture.direction = direction
    self.view?.addGestureRecognizer(gesture)   
}

func handleSwipe(gesture: UISwipeGestureRecognizer) {
    print(gesture.direction)
    switch gesture.direction {
    case UISwipeGestureRecognizerDirection.down:
        print("down swipe")
    case UISwipeGestureRecognizerDirection.up:
        print("up swipe")
    case UISwipeGestureRecognizerDirection.left:
        print("left swipe")
    case UISwipeGestureRecognizerDirection.right:
        print("right swipe")
    default:
        print("other swipe")
    }
}

В Swift 4.2 и Xcode 9.4.1

Добавьте делегата анимации CAAnimationDelegate в свой класс

//Swipe gesture for left and right
let swipeFromRight = UISwipeGestureRecognizer(target: self, action: #selector(didSwipeLeft))
swipeFromRight.direction = UISwipeGestureRecognizerDirection.left
menuTransparentView.addGestureRecognizer(swipeFromRight)

let swipeFromLeft = UISwipeGestureRecognizer(target: self, action: #selector(didSwipeRight))
swipeFromLeft.direction = UISwipeGestureRecognizerDirection.right
menuTransparentView.addGestureRecognizer(swipeFromLeft)

//Swipe gesture selector function
@objc func didSwipeLeft(gesture: UIGestureRecognizer) {
    //We can add some animation also
    DispatchQueue.main.async(execute: {
            let animation = CATransition()
            animation.type = kCATransitionReveal
            animation.subtype = kCATransitionFromRight
            animation.duration = 0.5
            animation.delegate = self
            animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        })
}

//Swipe gesture selector function
@objc func didSwipeRight(gesture: UIGestureRecognizer) {
        // Add animation here
        DispatchQueue.main.async(execute: {
            let animation = CATransition()
            animation.type = kCATransitionReveal
            animation.subtype = kCATransitionFromLeft
            animation.duration = 0.5
            animation.delegate = self
            animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        })
}

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

Проведите пальцем по экрану, который вы хотите, или viewcontroller полностью, в Swift 5 и XCode 11 на основе @Alexandre Cassagne

override func viewDidLoad() {
    super.viewDidLoad()

    addSwipe()
}

func addSwipe() {
    let directions: [UISwipeGestureRecognizer.Direction] = [.right, .left, .up, .down]
    for direction in directions {
        let gesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
        gesture.direction = direction
        self.myView.addGestureRecognizer(gesture)// self.view
    }
}

@objc func handleSwipe(sender: UISwipeGestureRecognizer) {
    let direction = sender.direction
    switch direction {
        case .right:
            print("Gesture direction: Right")
        case .left:
            print("Gesture direction: Left")
        case .up:
            print("Gesture direction: Up")
        case .down:
            print("Gesture direction: Down")
        default:
            print("Unrecognized Gesture Direction")
    }
}

Свифт 5+

Добавьте желаемые жесты к некоторым UIView:

      [UISwipeGestureRecognizer.Direction.up, .down, .left, .right].forEach {
    let gesture = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
    gesture.direction = $0
    someView.addGestureRecognizer(gesture)
}

Обработка действий смахивания:

      @objc func swiped(_ gesture: UISwipeGestureRecognizer) {
    switch gesture.direction {
    case .up:       print("up")
    case .down:     print("down")
    case .left:     print("left")
    case .right:    print("right")
    default: break
    }
}

UISwipeGestureRecognizer имеет directionсвойство, которое имеет следующее определение:

var direction: UISwipeGestureRecognizerDirection

Разрешенное направление пролистывания для этого распознавателя жестов.


Проблема с Swift 3.0.1 (и ниже) в том, что даже если UISwipeGestureRecognizerDirection соответствует OptionSet следующий фрагмент будет скомпилирован, но не даст никакого положительного ожидаемого результата:

// This compiles but does not work
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(gestureHandler))
gesture.direction = [.right, .left, .up, .down]
self.addGestureRecognizer(gesture)

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


Следующий код Playground показывает, как реализовать несколько UISwipeGestureRecognizer для того же UIView и то же самое selector используя массив map метод:

import UIKit
import PlaygroundSupport

class SwipeableView: UIView {
    convenience init() {
        self.init(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        backgroundColor = .red

        [UISwipeGestureRecognizerDirection.right, .left, .up, .down].map({
            let gesture = UISwipeGestureRecognizer(target: self, action: #selector(gestureHandler))
            gesture.direction = $0
            self.addGestureRecognizer(gesture)
        })
    }

    func gestureHandler(sender: UISwipeGestureRecognizer) {
        switch sender.direction {
        case [.left]:   frame.origin.x -= 10
        case [.right]:  frame.origin.x += 10
        case [.up]:     frame.origin.y -= 10
        case [.down]:   frame.origin.y += 10
        default:        break
        }
    }
}

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        view.addSubview(SwipeableView())
    }
}

let controller = ViewController()
PlaygroundPage.current.liveView = controller

Жест смахивания в Swift 5

  override func viewDidLoad() {
    super.viewDidLoad()
    let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
    swipeLeft.direction = .left
    self.view!.addGestureRecognizer(swipeLeft)

    let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
    swipeRight.direction = .right
    self.view!.addGestureRecognizer(swipeRight)

    let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
    swipeUp.direction = .up
    self.view!.addGestureRecognizer(swipeUp)

    let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
    swipeDown.direction = .down
    self.view!.addGestureRecognizer(swipeDown)
}

@objc func handleGesture(gesture: UISwipeGestureRecognizer) -> Void {
    if gesture.direction == UISwipeGestureRecognizer.Direction.right {
        print("Swipe Right")
    }
    else if gesture.direction == UISwipeGestureRecognizer.Direction.left {
        print("Swipe Left")
    }
    else if gesture.direction == UISwipeGestureRecognizer.Direction.up {
        print("Swipe Up")
    }
    else if gesture.direction == UISwipeGestureRecognizer.Direction.down {
        print("Swipe Down")
    }
}
      import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let leftside = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
        leftside.direction = .left
        view.addGestureRecognizer(leftside)
        
        let rightside = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
        rightside.direction = .right
        view.addGestureRecognizer(rightside)
        
        
        let upside =  UISwipeGestureRecognizer(target: self, action: #selector(swiped))
        upside.direction = .up
        view.addGestureRecognizer(upside)
        
        let downside = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
        downside.direction = .down
        view.addGestureRecognizer(downside)
        
        // Do any additional setup after loading the view, typically from a nib.
    }
    @objc func swiped(gesture: UIGestureRecognizer){
        if let swipeGesture = gesture as? UISwipeGestureRecognizer{
            switch swipeGesture.direction{
            case UISwipeGestureRecognizer.Direction.left:
                view.backgroundColor = UIColor.red
            case UISwipeGestureRecognizer.Direction.right:
                view.backgroundColor = UIColor.yellow
            case UISwipeGestureRecognizer.Direction.up:
                view.backgroundColor = UIColor.green
            case UISwipeGestureRecognizer.Direction.down:
                view.backgroundColor = UIColor.blue
               
            default:
                "ERROR"
                
            }
        }
    }

}

Сначала создайте baseViewController и добавить viewDidLoad this code "swift4":

class BaseViewController: UIViewController {             

     override func viewDidLoad() {
         super.viewDidLoad()
         let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
         swipeRight.direction = UISwipeGestureRecognizerDirection.right
         self.view.addGestureRecognizer(swipeRight)
         let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
         swipeLeft.direction = UISwipeGestureRecognizerDirection.left
         self.view.addGestureRecognizer(swipeLeft)
     }

     // Example Tabbar 5 pages
     @objc func swiped(_ gesture: UISwipeGestureRecognizer) {
         if gesture.direction == .left {
            if (self.tabBarController?.selectedIndex)! < 5 {
                self.tabBarController?.selectedIndex += 1
            }
         } else if gesture.direction == .right {
             if (self.tabBarController?.selectedIndex)! > 0 {
                 self.tabBarController?.selectedIndex -= 1
             }
         }
     }  
}

И использовать это baseController учебный класс:

class YourViewController: BaseViewController {
    // its done. Swipe successful
    //Now you can use all the Controller you have created without writing any code.    
}

Мне нравится подход (расширение) @Fattie, который я давно использую для жестов касания, за исключением расширения UIView вместо UIViewController. Это отличная возможность сэкономить время. Поскольку вы можете не захотеть включать все четыре декартовых направления, я по умолчанию использую nil для каждого селектора, чтобы проверить наличие параметров, чтобы сделать активацию жеста для любого заданного направления необязательным.

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

      extension UIView {
    func addSwipeRecognizer(direction: UISwipeGestureRecognizer.Direction, target: Any, action: Selector) {
        let recognizer = UISwipeGestureRecognizer(target: target, action: action)
        recognizer.direction = direction
        addGestureRecognizer(recognizer)
    }
    
    func addSwipeRecognizer(target: Any, left: Selector? = nil, right: Selector? = nil, up: Selector? = nil, down: Selector? = nil) {
        if let left  { addSwipeRecognizer(direction: .left,  target: target, action: left)  }
        if let right { addSwipeRecognizer(direction: .right, target: target, action: right) }
        if let up    { addSwipeRecognizer(direction: .up,    target: target, action: up)    }
        if let down  { addSwipeRecognizer(direction: .down,  target: target, action: down)  }
    }
    
    func addTapRecognizer(tapNumber: Int, target: Any, action: Selector) {
        let tap = UITapGestureRecognizer(target: target, action: action)
        tap.numberOfTapsRequired = tapNumber
        addGestureRecognizer(tap)
        isUserInteractionEnabled = true
    }
}

Использование:

      @objc func viewSwipedLeft()  { }
@objc func viewSwipedRight() { }
@objc func viewSwipedUp()    { }
@objc func viewSwipedDown()  { }

view.addSwipeRecognizer(target: self,
                             left:  #selector(viewSwipedLeft),
                             right: #selector(viewSwipedRight),
                             up:    #selector(viewSwipedUp),
                             down:  #selector(viewSwipedDown))

В Swift 5

let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
swipeGesture.direction = [.left, .right, .up, .down]
view.addGestureRecognizer(swipeGesture)

Покопавшись немного:

Самый короткий путь к добавить пойло для всех 4 -й направлений является:

override func viewDidLoad() {
    super.viewDidLoad()    
    for direction in [UISwipeGestureRecognizer.Direction.down, .up, .left, .right]{
        let swipeGest = UISwipeGestureRecognizer(target: self, action: #selector(swipeAction(_:)))
        swipeGest.direction = direction
        self.view.addGestureRecognizer(swipeGest)
    }
} 

@objc func swipeAction(_ gesture: UISwipeGestureRecognizer){
    switch gesture.direction {
    case UISwipeGestureRecognizer.Direction.right:
        print("Swiped right")
    case UISwipeGestureRecognizer.Direction.down:
        print("Swiped down")
    case UISwipeGestureRecognizer.Direction.left:
        print("Swiped left")
    case UISwipeGestureRecognizer.Direction.up:
        print("Swiped up")
    default: break
}

На 2022 год

Вот как вы, вероятно, написали бы это в любом реальном коде.

Вы никогда не будете загромождать свой код VC всем шаблоном.

В вашем контроллере представления...

      override func viewDidLoad() {
    super.viewDidLoad()
    pentaSceneView.buildFresh()
    addSwipesLRUD(#selector(swipeLeft), #selector(swipeRight),
                         #selector(swipeUp), #selector(swipeDown))
}

и ...

      @objc func swipeLeft() {
    blah ...
}

@objc func swipeRight() {
    blah ...
}

@objc func swipeUp() {
    blah ...
}

@objc func swipeDown() {
    blah ...
}

Следует ли использовать оператор switch? Ответ: НЕТ, не надо.

Код Apple не то чтобы неисправен, а просто «невероятно глуп», и они продолжают его менять. Оператор switch не элегантнее и не короче, чем четыре функции, и, скорее всего, он сломается, когда Apple (снова) слегка изменит или рационализирует способ..directionработает.

Вот простое необходимое расширение.

Поместите это в любой файл вашего проекта, скажем, «Utils.swift». Каждый реальный проект имеет файл типа «расширения здесь», в котором вы храните очень распространенные расширения, используемые во всех проектах.

      extension UIViewController {
    ///Add a UISwipeGestureRecognizer.
    func addSwipe(_ d: UISwipeGestureRecognizer.Direction, _ s: Selector) {
        let g = UISwipeGestureRecognizer(target: self, action: s)
        g.direction = d
        view.addGestureRecognizer(g)
    }
    
    ///Add four swipes for left right up down.
    func addSwipesLRUD(_ l: Selector, _ r: Selector, _ u: Selector, _ d: Selector) {
        addSwipe(.left, l)
        addSwipe(.right, r)
        addSwipe(.up, u)
        addSwipe(.down, d)
    }
}

Просто более быстрый синтаксис ответа Нейта:

[UISwipeGestureRecognizerDirection.right,
 UISwipeGestureRecognizerDirection.left,
 UISwipeGestureRecognizerDirection.up,
 UISwipeGestureRecognizerDirection.down].forEach({ direction in
    let swipe = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
    swipe.direction = direction
    self.view.addGestureRecognizer(swipe)
 })

Для Swift 5 обновлено

//Add in ViewDidLoad
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.handleSwipe))
        gesture.direction = .right
        self.view.addGestureRecognizer(gesture)

//Add New Method
@objc func handleSwipe(sender: UISwipeGestureRecognizer) {
        print("swipe direction is",sender.direction)

    }

Легко. Просто следуйте приведенному ниже коду и наслаждайтесь.

//SwipeGestureMethodUsing
func SwipeGestureMethodUsing ()
{
    //AddSwipeGesture
    [UISwipeGestureRecognizerDirection.right,
     UISwipeGestureRecognizerDirection.left,
     UISwipeGestureRecognizerDirection.up,
     UISwipeGestureRecognizerDirection.down].forEach({ direction in
        let swipe = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipe.direction = direction
        window?.addGestureRecognizer(swipe)
     })
}

//respondToSwipeGesture
func respondToSwipeGesture(gesture: UIGestureRecognizer) {

    if let swipeGesture = gesture as? UISwipeGestureRecognizer
    {
        switch swipeGesture.direction
        {
        case UISwipeGestureRecognizerDirection.right:
            print("Swiped right")
        case UISwipeGestureRecognizerDirection.down:
            print("Swiped down")
        case UISwipeGestureRecognizerDirection.left:
            print("Swiped left")
        case UISwipeGestureRecognizerDirection.up:
            print("Swiped up")
        default:
            break
        }
    }
}

Это можно сделать, просто объявив одну функцию, которая будет обрабатывать все ваши направления UISwipeGestureRecognizer. Вот мой код:

let swipeGestureRight = UISwipeGestureRecognizer(target: self, action:#selector(ViewController.respondToSwipeGesture(_:)) )
swipeGestureRight.direction = UISwipeGestureRecognizerDirection.right
self.view .addGestureRecognizer(swipeGestureRight)

let swipeGestureLeft = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
swipeGestureLeft.direction = UISwipeGestureRecognizerDirection.left
self.view.addGestureRecognizer(swipeGestureLeft)

let swipeGestureUp = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
swipeGestureUp.direction = UISwipeGestureRecognizerDirection.up
self.view.addGestureRecognizer(swipeGestureUp)

let swipeGestureDown = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
swipeGestureDown.direction = UISwipeGestureRecognizerDirection.down
self.view.addGestureRecognizer(swipeGestureDown)

Вот функция, которая будет изменять функциональность swipedirection:

func respondToSwipeGesture(_ sender: UIGestureRecognizer) {
    if let swipeGesture = sender as? UISwipeGestureRecognizer {
        switch swipeGesture.direction {
            case UISwipeGestureRecognizerDirection.right:
                print("right swipe")
            case UISwipeGestureRecognizerDirection.left:
                print("leftSwipe")
            case UISwipeGestureRecognizerDirection.up:
                print("upSwipe")
            case UISwipeGestureRecognizerDirection.down:
                print("downSwipe")
            default:
                break
        }
    }
}

Просто так: (Swift 4.2.1)

UISwipeGestureRecognizer.Direction.init(
  rawValue: UISwipeGestureRecognizer.Direction.left.rawValue |
            UISwipeGestureRecognizer.Direction.right.rawValue |
            UISwipeGestureRecognizer.Direction.up.rawValue |
            UISwipeGestureRecognizer.Direction.down.rawValue
)

я нашел простой способ распознавания жестов с помощью swift 5 и xcode 13

           let gestureLeft = UISwipeGestureRecognizer(target: self, action: #selector(onLeftGesture))
    gestureLeft.direction = UISwipeGestureRecognizer.Direction.left
    imageView.addGestureRecognizer(gestureLeft)
    
    let gestureRight = UISwipeGestureRecognizer(target: self, action: #selector(onRightGesture))
    gestureRight.direction = .right
    imageView.addGestureRecognizer(gestureRight)
    
    let gestureUp = UISwipeGestureRecognizer(target: self, action: #selector(onUpGesture))
    gestureUp.direction = .up
    imageView.addGestureRecognizer(gestureUp)
    
    let gestureDown = UISwipeGestureRecognizer(target: self, action: #selector(onDownGesture))
    gestureDown.direction = .down
    imageView.addGestureRecognizer(gestureDown)
            
    let gestureTapSingle = UITapGestureRecognizer(target: self, action: #selector(onSingleTapGesture))
    gestureTapSingle.numberOfTapsRequired = 1
    labelGesture.addGestureRecognizer(gestureTapSingle)
    
    let gestureTapDouble = UITapGestureRecognizer(target: self, action: #selector(onDoubleTapGesture))
    gestureTapDouble.numberOfTapsRequired = 2
    labelGesture.addGestureRecognizer(gestureTapDouble)
    
    gestureTapSingle.require(toFail: gestureTapDouble)
    
    let gesturePressLong = UILongPressGestureRecognizer(target: self, action: #selector(onLongPressGesture))
    gesturePressLong.minimumPressDuration = 0.5
    labelGesture.addGestureRecognizer(gesturePressLong)
}
@objc func onLeftGesture(_ sender: UISwipeGestureRecognizer) {
    print("Left")
}

@objc func onRightGesture(_ sender: UISwipeGestureRecognizer) {
    print("Right")
}

@objc func onUpGesture(_ sender: UISwipeGestureRecognizer) {
    print("Up")
}

@objc func onDownGesture(_ sender: UISwipeGestureRecognizer) {
    print("Down")
}
    
@objc func onSingleTapGesture(_ sender: UITapGestureRecognizer) {
 print("Single Tap")
}

@objc func onDoubleTapGesture(_ sender: UITapGestureRecognizer) {
   print("Double Tap")
}

@objc func onLongPressGesture(_ sender: UILongPressGestureRecognizer) {
   print("Long Press Gesture!!!")
}
Другие вопросы по тегам