Как сделать собственный iconView в гугл картах с помощью swift? - PullRequest
0 голосов
/ 19 декабря 2018

Мне нужно сделать что-то вроде этого map with marker and label

маркер со статической меткой в ​​google maps sdk для iOS

1 Ответ

0 голосов
/ 19 декабря 2018

Если будет много маркеров, я не рекомендую использовать 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.
...