如何创建自己的GMSMarker? (GoogleMaps,iOS) - Swift

时间:2016-07-25 04:42:32

标签: ios swift google-maps google-maps-markers gmsmapview

我想创建自己的标记,因为我需要跟踪有关它们的额外信息(例如,添加日期,标记ID)......

所以我创建了另一个类,如下所示:

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

    }

但我不知道下一步该做什么......我应该创建一个" init"填充我的markerId和addedDate的方法?或者我应该覆盖GMSMarker构造函数(不是" init") 它可以是

    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方法设置标记ID和日期?

或者我可以覆盖GMSMarker构造函数,然后使用super(what-is-expecting-here)然后我会添加日期和标记ID。

我真的需要创建自己的标记类型,因为我需要跟踪这些事情...例如,我希望将来删除所有超过1周的标记...例如...如果我没有跟踪标记日期,那就不可能了。

我真的需要Swift和编程。我非常感谢你的帮助:)

4 个答案:

答案 0 :(得分:2)

还有另一种方法,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

答案 1 :(得分:0)

根据此documentation,创建一个GMSMarker对象,添加包含positiontitle的标记,并设置其map。下面是一个演示如何将标记添加到现有GMSMapView对象的示例。标记在坐标10,10处创建,并在单击时在信息窗口中显示字符串“Hello world”。

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

从此tutorial开始,在Google Maps SDK中,标记是GMSMarker类的对象。初始化此类对象时,您必须指定以CLLocationCoordinate2D类型表示的经度和纬度。

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

标记对象初始化后,地图SDK知道放置它的位置,然后需要指定要添加标记的地图对象。

检查这些相关的主题:

希望这有帮助!

答案 2 :(得分:0)

扩展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

答案 3 :(得分:0)

//来自可变数组的地图上的过去标记我们必须用于语句

//创建标记   让marker = GMSMarker()

for i in 0 ..

// possitioning marker,这里标记,mrk,name是可变数组        marker.position = CLLocationCoordinate2D(纬度:self.mark [i] as!CLLocationDegrees,经度:self.mrk [i] as!CLLocationDegrees)//可变数组               marker.title =“”                 marker.snippet = self.name [i] as! String //可变数组                 marker.map = self.mapView                 }