В настоящее время у меня есть 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, и это тоже не сработалоЛюбая помощь приветствуется, спасибо заранее!