Если будет много маркеров, я не рекомендую использовать iconView, потому что это делает UI настолько медленным, но здесь все идет так:
Создайте файл UIView как «MarkerInfoView», который будет созданas MarkerInfoView.xib
Затем создайте свой пользовательский интерфейс, добавьте свой imageView для своего значка, а затем добавьте другие необходимые представления для завершения вашего iconView.Также включите маркер в дизайн как imageView.Потому что я не уверен на 100%, но я думаю, что вы не можете использовать и iconView, и значок в картах Google.
Затем создайте файл swift под названием "MarkerInfoView.swift", перейдите на MarkerInfoView.xib
и выберите его класс * 1009.*.
Затем создайте еще один файл swift, назовем его PlaceMarker
, внутри этого файла вы создадите класс, который будет соответствовать GMSMarker, затем вы инициализируете свой вид, установив его равным iconView
вPlaceMarker
класс.Давайте сделаем это следующим образом:
class PlaceMarker: GMSMarker {
//Initialize with lat and long, then set position equal to the coordinate.
// 'position' comes from inheriting from GMSMarker, which is google marker.
init(latitude: Double, longitude: Double, distance: Double, placeName: String) {
super.init()
if let lat: CLLocationDegrees = latitude,
let long: CLLocationDegrees = longitude {
let coordinate = CLLocationCoordinate2D(latitude: lat, longitude: long)
position = coordinate
}
let view = Bundle.main.loadNibNamed("MarkerInfoView", owner: nil, options: nil)?.first as! MarkerInfoView
// you can set your view's properties here with data you are sending in initializer.
// Remember if you need to pass more than just latitude and longitude, you need
// to update initializer.
// lets say you created 2 outlet as placeNameLabel, and distanceLabel, you can set
// them like following:
view.placeNameLabel.text = placeName
view.distanceLabel.text = distance
// Once your view is ready set iconView property coming from inheriting to
// your view as following:
iconView = view
appearAnimation = .pop //not necessarily but looks nice.
}
}
Затем, когда у вас есть ваши данные и ваше представление googlemaps в ViewController
, вы можете установить следующее:
let latitude = 101.432432 //arbitrary, should come from your source
let longitude = 34.432124
let distance = 4
let placeName = "My place".
let marker = PlaceMarker(latitude: latitude, longitude: longitude, distance: distance, placeName: placeName)
marker.map = self.mapView // your google maps set your marker's map to it.