如何在iOS中使用GoogleMap创建customMarkerView

时间:2018-07-12 11:42:02

标签: ios iphone swift

我想在GoogleMap上创建此customMarkerView(带有酒店撒哈拉星和海洋大道的视图),并且应该能够在地图上看到这两个视图而无需单击它。

swift4是推荐的。

就像uber

检查参考图像。

date_trunc()

2 个答案:

答案 0 :(得分:0)

您可以使用MarkerViews在地图中添加两个GMSMarker()

将它们放入array中 然后,您可以使用GMSCoordinateBounds聚焦地图以显示所有标记。 下面的代码显示了如何聚焦地图。

    var bounds = GMSCoordinateBounds()
    for marker in yourArrayOfMarkers
    {
        bounds = bounds.includingCoordinate(marker.position)
    }
    let update = GMSCameraUpdate.fit(bounds, withPadding: 60)
    mapView.animate(with: update)

答案 1 :(得分:0)

func customMarkerView(titleText : String, markerImg : UIImage) -> UIImage{
    let mainView : UIView = UIView()
    let subView : UIView = UIView()
    let padding : CGFloat = 8.0
    let rightImgView : UIImageView = UIImageView()
    let markerImgView : UIImageView = UIImageView()
    let cfont = UIFont(name: "Roboto-Regular", size: 16.0)
    //createing marker label.
    let titleLabel : UILabel = UILabel(frame: CGRect(x: 4.0, y: 4.0, width: 150.0, height: cfont!.lineHeight))
    titleLabel.lineBreakMode = .byWordWrapping
    titleLabel.font = cfont!
    titleLabel.text = titleText
    titleLabel.numberOfLines = 0
    titleLabel.sizeToFit()
    titleLabel.backgroundColor = UIColor.white
    let noLines = titleLabel.frame.size.height / cfont!.lineHeight

    if noLines > 2{
        titleLabel.numberOfLines = 2
        titleLabel.frame = CGRect(x: 4.0, y: 4.0, width: titleLabel.frame.width, height: 2 * cfont!.lineHeight)
    }else{
        titleLabel.frame = CGRect(x: 4.0, y: 4.0, width: titleLabel.frame.width, height: 24.0)
    }


    let rightArrow = UIImage(named: "right-arrow")
    rightImgView.frame = CGRect(x: titleLabel.frame.origin.x + titleLabel.frame.width + padding, y: 4.0, width: 24.0, height: titleLabel.frame.height)
    rightImgView.image = rightArrow!
    rightImgView.contentMode = .center

    subView.addSubview(titleLabel)
    subView.addSubview(rightImgView)

    subView.frame = CGRect(x: 0.0, y: 0.0, width: 2 * 4.0 + titleLabel.frame.width + padding + rightImgView.frame.width, height: 2 * 4.0 + titleLabel.frame.height)
    subView.backgroundColor = UIColor.white

    markerImgView.frame = CGRect(x: subView.center.x - markerImg.size.width/2, y: subView.frame.height + 4.0, width: markerImg.size.width, height: markerImg.size.height)
    markerImgView.image = markerImg
    markerImgView.contentMode = .scaleAspectFit

    mainView.addSubview(markerImgView)

    mainView.frame = CGRect(x: 0.0, y: 0.0, width: subView.frame.width, height: subView.frame.height + 4.0 + markerImgView.frame.height)
    mainView.addSubview(subView)
    mainView.backgroundColor = UIColor.clear
    UIGraphicsBeginImageContextWithOptions(mainView.bounds.size, false, UIScreen.main.scale)
    mainView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let icon : UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return icon
}