В настоящее время мое приложение открывает пользовательское информационное окно, когда делегат MapView вызывает протокол didTap. Затем вызывается функция, которая инициализирует необходимые аспекты информационного окна, показанного ниже ...
var tappedOverlay : GMSOverlay?
var customInfoWindow : CustomInfoWindow?
var mapView: GMSMapView!
override func viewDidLoad(){
super.viewDidLoad()
self.customInfoWindow = CustomInfoWindow().loadView()
let camera = GMSCameraPosition.camera(withLatitude: 37, longitude: -77, zoom: 16.0)
mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
mapView.delegate = self
self.view = mapView
//this is where i attempt to force a infoWindow to open
tappedOverlay = overlay
initInfoWindow(overlay: overlay)
}
fun initInfoWindow(overlay: GMSOverlay){
mapView.animate(toLocation: position!)
let point = mapView.projection.point(for: position!)
let newPoint = mapView.projection.coordinate(for: point)
let camera = GMSCameraUpdate.setTarget(newPoint)
mapView.animate(with: camera)
let background = UIColor.infoWindowBackground
customInfoWindow?.layer.backgroundColor = background.cgColor
customInfoWindow?.layer.cornerRadius = 8
customInfoWindow?.center = mapView.projection.point(for: position!)
customInfoWindow?.center.y -= 100
customInfoWindow?.CustomWindowLabel.text = overlay.title
customInfoWindow?.CustomWindowSubLabel.lineBreakMode = .byWordWrapping
customInfoWindow?.CustomWindowSubLabel.numberOfLines = 0
mapView.addSubview(customInfoWindow!)
}
func mapView(_ mapView: GMSMapView, didTap Overlay: GMSOverlay){
initInfoWindow(overlay: overlay)
}
Теперь я хотел бы, чтобы приложение автоматически открывало определенное информационное окно, как только оно загружается.
Когда я пытаюсь вручную отобразить информационное окно при загрузке, вызвав функцию в viewDidLoad (), я должен закомментировать строку mapView.animate(with: camera)
, иначе плитки карты никогда не загрузятся. Кто-то указал мне, что методы mapView имеют некоторую «фоновую» информацию о оверлее, когда они вызываются, поэтому я добавил строку tappedOverlay = overlay
, это близко к той части информационного окна, которая отображается при загрузке приложения. Тем не менее, эта и вся другая «обычная» информация Windows появляются без фона и не отцентрированы в точке и не могут взаимодействовать.
Окна infoWindow являются подклассом UIView, загруженным из файла XIB.
Вышеприведенный код - это то, что, как я думал, будет уместно извлечено из большей кодовой базы Дайте мне знать, если что-нибудь нужно добавить!
Любая помощь приветствуется!