Я работал над приложением ios на основе местоположения. Это приложение имеет требование показывать 2 информационных окна одновременно при рисовании маршрута между 2 точками, такими как на этом рисунке . Я попытался реализовать, написав код ниже, но 2 информационное окно не появилось. Появляется, когда я нажимаю на маркер выбора или маркер падения. Я также исследовал и нашел решение. Решение состояло в том, чтобы создать представление и добавить его в представление значка маркера, но я хотел реализовать с помощью информационного окна. Любая помощь здесь будет высоко ценится. Я исследовал, но не смог найти правильное решение! Спасибо!
В этом коде ниже model.route - это кодированная ломаная линия, используемая для создания маркера перетаскивания. В приведенном ниже коде я даже добавил mapView.selectedMarker
код, но ничего не произошло.
let polyLine = Polyline(encodedPolyline: model.route)
guard let decodeCordinates:[CLLocationCoordinate2D] = polyLine.coordinates else {
return
}
let pickupLat = decodeCordinates.first?.latitude ?? 0
let pickupLon = decodeCordinates.first?.longitude ?? 0
let dropLat = decodeCordinates.last?.latitude ?? 0
let dropLon = decodeCordinates.last?.longitude ?? 0
// draw pickup marker
self.pickupMarker = GMSMarker()
self.pickupMarker.position = CLLocationCoordinate2D(latitude: pickupLat, longitude: pickupLon)
self.pickupMarker.icon = UIImage(named: "pickupMarker")
self.pickupMarker.map = self.mapView
//draw drop marker
self.dropupMarker = GMSMarker()
self.dropupMarker.position = CLLocationCoordinate2D(latitude: dropLat, longitude: dropLon)
self.dropupMarker.icon = UIImage(named: "dropMarker")
self.dropupMarker.map = self.mapView
self.mapView.animate(toZoom: 15)
В приведенном ниже делегате PickInfoWindow и DropInfoWindow - это настраиваемое представление.
func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
if marker.icon == self.pickupMarker.icon {
return PickInfoWindow(frame: CGRect(x: 0, y: 0, width: 100, height: 41))
} else {
return DropInfoWindow(frame: CGRect(x: 0, y: 0, width: 100, height: 41))
}
}