Swift 中 UIPanGestureRecognizer 的奇怪问题

Strange issue with UIPanGestureRecognizer in 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)

我怀疑问题出在您的视图是 GMSMapView 的子视图。地图视图已经添加了一堆手势识别器,并且手势识别器回调被发送到 GMSMapView 实例而不是您的子视图。虽然在 GMSMapView 上有一个 settings 属性 可以让您配置地图的用户界面设置。尝试使用以下代码启用手势:

self.mapView.settings.consumesGesturesInView = false

您还可以在那里自定义其他设置。希望这有帮助