Невозможно распознать жесты в подпредставлении в GMSMapView - PullRequest
0 голосов
/ 01 марта 2019

В настоящее время у меня есть GMSMapView с подпредставлением UIView, но я не могу получить подвид для распознавания жестов касания.Я пробовал много решений, таких как установка isUserInteractionEnabled равным true и переопределение delegate, но ни одно из них не сработало до сих пор.

import UIKit
import GoogleMaps
class MapViewController: UIViewController, UIGestureRecognizerDelegate {
    var testView: UIView!
    var mapView: GMSMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let camera = GMSCameraPosition.camera(withLatitude: 0, longitude: 0, zoom: 15.0)
        mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        mapView.isUserInteractionEnabled = true
        self.view = mapView

        let screenSize: CGRect = UIScreen.main.bounds
        let screenWidth = screenSize.width
        let screenHeight = screenSize.height

        testView = UIView()
        testView.backgroundColor = UIColor(white: 0, alpha: 0.5)
        testView.frame.origin = CGPoint(x: 0, y: 0);
        testView.frame.size = CGSize(width: screenWidth, height: screenHeight)
        testView.isUserInteractionEnabled = true

        let gesture = UITapGestureRecognizer(target: self, action: #selector(self.doSomething(_:)))
        gesture.numberOfTapsRequired = 1
        gesture.numberOfTouchesRequired = 1
        gesture.delegate = self
        self.view.addSubview(testView)
        testView.addGestureRecognizer(gesture)
    }

    @objc func doSomething(_ sender: UIGestureRecognizer) {
        print("doSomething")
    } 

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if (touch.view == gestureRecognizer.view) {
            print("returned true")
            return true
        }
        return false
    }
}

Интересно то, что когда я нажимаю testView,он выводит «вернул true» из моей функции shouldReceiveTouch.Так что я не совсем уверен, как функция делегата возвращает true, но функция выбора не срабатывает.Я также попробовал этот жест смахивания с другим UIView, и это тоже не сработалоЛюбая помощь приветствуется, спасибо заранее!

1 Ответ

0 голосов
/ 01 марта 2019

Введите следующий код:

mapView.settings.consumesGesturesInView = false

Из Google Maps iOS SDK Reference :

Управляет тем, полностью ли жесты используются пользователямиGMSMapView при включенных жестах (по умолчанию ДА).Это предотвращает получение этих жестов родительскими представлениями.

Когда GMSMapView содержится в UIScrollView (или другой прокручиваемой области), это означает, что жесты на карте не будут дополнительно использоваться в качестве жестов прокрутки.Однако отключение этого параметра (установите значение «НЕТ») может быть полезно для поддержки иерархий или требований сложного представления.

...