Проведите пальцем вниз и вверх по UIView, работающему, но scrollview мешает ему быстро? - PullRequest
0 голосов
/ 13 декабря 2018

Я искал в Google, но, к сожалению, не смог найти решение для моего запроса, поэтому, наконец, я решил опубликовать его здесь.У меня есть UIViewController, который содержит ScrollView, который имеет UIView и tableView.На этом UIView я применил к нему жесты: проведите вправо, влево, вверх и вниз, а также нажмите жест.Жесты вправо, влево и касание работают нормально, но жесты вверх и вниз не работают (не распознаются).Это связано с тем, что они содержатся в scrollView, и когда делаются жесты пролистывания вверх и вниз, просмотр прокрутки идет вверх и вниз и, следовательно, препятствует жестам пролистывания, применяемым к UIView.Скриншоты сценария были прикреплены.Любая помощь будет оценена.

Теперь Мой вопрос: при нажатии (прокрутка выполнена) на tableView ячейки должны прокручиваться, и в это время весь вид не должен прокручиваться, а когда жестывыполняются на UIView, содержащем UIImage (жест смахивания вверх и вниз), весь вид не должен прокручиваться снова.Надеюсь, мне удалось передать мой запрос.

enter image description here

// Вот весь код класса.

import UIKit

class TableViewVC: UIViewController,UIGestureRecognizerDelegate{

    @IBOutlet weak var headerView: UIView!
    @IBOutlet weak var scrollView: UIScrollView!

    var names = ["Anurag","Tushar","Deepamkar","Karnail","Anurag","Tushar","Deepamkar","Karnail","Anurag","Tushar","Deepamkar","Karnail","Anurag","Tushar","Deepamkar","Karnail","Anurag","Tushar","Deepamkar","Karnail"]
    override func viewDidLoad() {
        super.viewDidLoad()

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

        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipeLeft.direction = UISwipeGestureRecognizerDirection.left
        self.headerView.addGestureRecognizer(swipeLeft)

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

        let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipeDown.direction = UISwipeGestureRecognizerDirection.up
        self.headerView.addGestureRecognizer(swipeUp)

        let tap = UITapGestureRecognizer(target: self, action: #selector(self.respondToTapGesture))
        self.headerView.addGestureRecognizer(tap)
    }

  @objc 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
            }
        }
    }

    @objc func respondToTapGesture(gesture: UIGestureRecognizer) {
        if gesture is UITapGestureRecognizer {
           print("Tapped")
        }
    }
}

extension TableViewVC : UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return names.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell1", for: indexPath) as! TableViewCell1
            cell.textLabel?.text = names[indexPath.row]
            return cell

    }
}

1 Ответ

0 голосов
/ 13 декабря 2018

Реализация делегата UISwipeGestureRecognizer

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

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
...