Как создать свой собственный GMSMarker? (GoogleMaps, iOS) - Свифт

Я хотел бы создать свои собственные маркеры, потому что мне нужно отслеживать дополнительную информацию о них (например, дату добавления, идентификатор маркера)...

Поэтому я создал еще один класс следующим образом:

    class myMarker: GMSMarker {
        var markerID: Int
        var addedDate: NSDate

    }

Но я не знаю, что делать дальше... должен ли я создать метод "init" для заполнения моего markerId и addDate? или я должен переопределить конструктор GMSMarker (который не является «инициализирующим»). Это может быть

    class myMarker: GMSMarker {
        var markerID: Int
        var addedDate: NSDate
        var myMarker: GMSMarker

        init(marID: Int, date: NSDate, GMSMarker: markerwithoutDateNorId){
           self.markerID = marID
           self.addedDate = date
           self.myMarker = markerwithoutDateNorId
        }
     }

Я действительно понятия не имею, как это реализовать. Может быть, мне даже не нужно реализовывать конструктор, а использовать конструктор GMSMarker (который, как мне кажется, я унаследовал), а затем использовать методы set для установки идентификатора маркера и даты?

Или я мог бы переопределить конструктор GMSMarker, чтобы затем использовать super(what-is-expecting-here), а затем добавить дату и идентификатор маркера.

Мне действительно нужно создать свой собственный тип маркера, потому что мне нужно отслеживать эти вещи... например, я хотел бы в будущем, например, удалить все маркеры старше 1 недели... и если я не Засечь дату, что бы мне было невозможно.

Мне действительно нужен Swift и программирование в целом. Я был бы очень признателен за вашу помощь :)


person Fabian Vergara    schedule 25.07.2016    source источник


Ответы (4)


Есть и другой подход, GMSMarker имеет свойство userData, которое может принимать AnyObject.

var info: Dictionary<String, AnyObject>?
info[“markerID”] = 0
info[“addedDate”] = NSDate()

let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude:latitude, longitude:longitude)
marker.map = nil
marker.tracksInfoWindowChanges = false
marker.map = self.mapView
marker.userData = info
person Prabhu.Somasundaram    schedule 31.10.2016

//прошлые маркеры на карте из изменяемого массива, который мы должны использовать для статуса

//создание маркера

 let marker = GMSMarker()
for i in 0..<n{ // n= count of array

//possitioning marker,here mark,mrk,name are mutable arrays
  marker.position =CLLocationCoordinate2D(latitude:self.mark[i] as! CLLocationDegrees ,longitude:self.mrk[i] as! CLLocationDegrees ) //mutable array
  marker.title = ""
  marker.snippet = self.name[i] as! String//mutable array
  marker.map = self.mapView
}
person fahadfaz    schedule 06.11.2017
comment
пожалуйста, отформатируйте свой код и уточните, как это отвечает на вопрос. Ответы, содержащие только код, могут быть сочтены низкокачественными и, следовательно, удалены. - person Gilles Gouaillardet; 06.11.2017
comment
Ответы только на код не приветствуются, поскольку они не предоставляют много информации для будущих читателей, пожалуйста, объясните, что вы написали. - person WhatsThePoint; 06.11.2017

На основе этой документации создайте объект GMSMarker для добавления маркер, который включает position и title, и установите его map. Вот пример, демонстрирующий, как добавить маркер к существующему объекту GMSMapView. Маркер создается с координатами 10,10 и отображает строку «Hello world» в информационном окне при нажатии.

let position = CLLocationCoordinate2DMake(10, 10)
let marker = GMSMarker(position: position)
marker.title = "Hello World"
marker.map = mapView

Из этого учебника в Google Maps SDK маркер является объектом GMSMarker класс. При инициализации такого объекта необходимо указать долготу и широту, выраженные в виде типа CLLocationCoordinate2D.

let coordinate = CLLocationCoordinate2D(latitude: self.mapTasks.fetchedAddressLatitude, longitude: self.mapTasks.fetchedAddressLongitude)

Когда объект-маркер инициализирован и SDK карт знает, где его разместить, необходимо указать объект карты, к которому будет добавлен маркер.

Проверьте эти связанные темы:

Надеюсь это поможет!

person abielita    schedule 26.07.2016

Расширить класс GMSMarker

extension GMSMarker{

    fileprivate struct AssociatedKeys{
        static var anyExtraData : AnyObject?
    }
    var anyExtraData: AnyObject? {
        get {

            return objc_getAssociatedObject(self, &AssociatedKeys.anyExtraData) as? AnyObject)

        }
        set (newValue){
            if let newValue = newValue {
                objc_setAssociatedObject(
                    self,
                    &AssociatedKeys.anyExtraData,
                    newValue as AnyObject?,
                    objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            }
        }
    }
}

Затем вы можете использовать его в своем объекте GMSMarker:

let marker = GMSMarker()
marker.iconView = //Your UIView to resemble the new custom Marker.
marker.anyExtraData = //AnyObject
person mnabaa    schedule 18.06.2017