Конфликт с панорамированием и пин-жестом. Требуется 3 пальца, чтобы работать одновременно - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь панорамировать и сжимать жест в моем представлении.Моя цель - масштабирование двумя пальцами и панорамирование.Но когда я масштабирую двумя пальцами, я не могу панорамировать изображение.Даже код не вводит жест панорамирования.Только это работает, когда я масштабирую двумя пальцами и добавляю еще один палец (всего 3).Когда я вошел в эту ситуацию, мой код видит количество касаний как 1. То есть он игнорирует жесты.Где моя проблема?Как я могу сделать щипок и панорамирование двумя пальцами одновременно.Вот мой кодСпасибо

override func viewDidLoad() {
    super.viewDidLoad()



    self.view.isUserInteractionEnabled = true
    self.view.isMultipleTouchEnabled = true

    pan =  UIPanGestureRecognizer(target: self, action: #selector(handlePan))
    pinch = UIPinchGestureRecognizer(target: self, action: #selector(handleZoom))

    pan.delegate = self
    pinch.delegate = self
    pan.isEnabled = false

    self.view.addGestureRecognizer(pinch)
    self.view.addGestureRecognizer(pan)
}

extension LineupsViewController: UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {

    return true

    }

    @objc func handleZoom(_ gesture: UIPinchGestureRecognizer) {
    switch gesture.state {
    case .began, .changed:
        pan.isEnabled = true
        if gesture.state == .began && self.viewCenter == nil {
            self.viewCenter = self.view.center
        }

        if gesture.scale >= 1 {

            let scale = gesture.scale
            gesture.view!.transform = CGAffineTransform(scaleX: scale, y: scale)

        }
        break;
    default:

        UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseInOut, animations: {
            gesture.view!.transform = .identity
        }) { _ in
            self.pan.isEnabled = false

        }
    }
}

    @objc func handlePan(_ gesture: UIPanGestureRecognizer) {

    switch gesture.state {
    case .began, .changed:
        if gesture.numberOfTouches != 2 {
            let translation = gesture.translation(in: self.view)
            gesture.view!.center = CGPoint(x: self.view.center.x + translation.x , y: self.view.center.y + translation.y)
            gesture.setTranslation(.zero, in: self.view)
        }

        break;
    default:

        UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseInOut, animations: {
            if self.viewCenter != nil {
                gesture.view?.center = self.viewCenter!

            }

        }) { _ in

        }
        break
    }
    }
}
...