Я пытаюсь получить MKAnnotationView , который отображает местоположение пользователя (синяя точка) в MapKit, чтобы добавить собственный распознаватель жестов.Возможно ли это?
Я пытался с помощью метода делегата, но я не знаю, как убрать представление из представления, когда у меня нет строки идентификатора.Если бы у меня был идентификатор, я мог бы, вероятно, сделать что-то вроде кода ниже:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
let userLocationAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "??", for: annotation)
userLocationAnnotationView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.handleStuff)))
return userLocationAnnotationView
}
}
РЕДАКТИРОВАТЬ
Ах, застрял на этом в течение нескольких часов и нашел решение непосредственнопосле того как я написал.Я нашел два разных способа решить его с помощью методов делегатов.Первый способ может быть через didSelect :
func mapView(_ mapView: MKMapView,
didSelect view: MKAnnotationView){
if view.annotation is MKUserLocation {
// User clicked on the blue dot
}
}
Или, если требуется распознаватель жестов, это можно сделать, как показано ниже.Вероятно, следует добавить проверку, если распознаватель жестов уже был добавлен, поскольку эта функция вызывается каждый раз, когда добавляется представление аннотации.
func mapView(_ mapView: MKMapView,
didAdd views: [MKAnnotationView]){
for view in views {
if view.annotation is MKUserLocation {
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.handleStuff)))
}
}
}