Странная проблема с UIPanGestureRecognizer в Swift

Я пытаюсь добавить в представление жест панорамирования, но не знаю, почему он не работает. Вот код моего UIView:

    self.infoView = UIView()
    self.mapView.addSubview(infoView)
    infoView.backgroundColor = .white
    infoView.layer.cornerRadius = 10.0
    infoView.layer.masksToBounds = true
    infoView.isUserInteractionEnabled = true
    infoView.translatesAutoresizingMaskIntoConstraints = false

    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.moveInfoView(recognizer:)))
    infoView.addGestureRecognizer(panGesture)

Я определяю это в моем UIViewController как:

var infoView: UIView!

и мой метод жеста панорамирования выглядит так:

@objc func moveInfoView(recognizer:UIPanGestureRecognizer) {
    let translation = recognizer.translation(in: self.view)
    if let view = recognizer.view {
        view.center = CGPoint(x:view.center.x + translation.x,
                              y:view.center.y + translation.y)
    }
    recognizer.setTranslation(CGPoint.zero, in: self.view)
}

Я действительно не вижу своей ошибки. Вроде там все правильно, но вроде я не прав. Не могли бы вы указать на мою ошибку?

ОБНОВЛЕНИЕ

Мои ограничения:

let constraints = [
        // InfoView constraints
        NSLayoutConstraint(item: infoView, attribute: .bottom, relatedBy: .equal, toItem: self.view.safeAreaLayoutGuide, attribute: .bottom, multiplier: 1.0, constant: 0.0),
        NSLayoutConstraint(item: infoView, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1.0, constant: 0.0),
        NSLayoutConstraint(item: infoView, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1.0, constant: 0.0),
        infoViewHeightConstraint]

куда

let infoViewHeightConstraint = infoView.heightAnchor.constraint(greaterThanOrEqualToConstant: 112.0)

person J. Doe    schedule 22.09.2018    source источник
comment
Ваше свойство self.mapView является экземпляром класса, если вы не возражаете, если я вас спрослю? Это MKMapView или GMSMapView (Карты Google) или что-то еще?   -  person Pranay    schedule 22.09.2018
comment
@Pranay это GMSMapView   -  person J. Doe    schedule 22.09.2018


Ответы (1)


Я подозреваю, что проблема в том, что ваша точка зрения является частью GMSMapView. В представление карты уже добавлено несколько распознавателей жестов, и обратные вызовы распознавателя жестов отправляются экземпляру GMSMapView, а не вашему вложенному представлению. Хотя есть свойство settings на GMSMapView, которое позволяет вам настраивать параметры пользовательского интерфейса для карты. Попробуйте использовать следующий код, чтобы включить жесты:

self.mapView.settings.consumesGesturesInView = false

Есть также другие настройки, которые вы можете настроить там. Надеюсь это поможет

person Pranay    schedule 23.09.2018
comment
ты спас мне день! Спасибо! - person J. Doe; 23.09.2018