Странная проблема с UIPanGestureRecognizer в Swift - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь добавить жест панорамирования к своему виду, но я не знаю, почему он не хочет работать.Вот код моего 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)

1 Ответ

0 голосов
/ 23 сентября 2018

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

self.mapView.settings.consumesGesturesInView = false

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...