自定义Google地图标记视图

时间:2014-05-28 22:19:53

标签: ios google-maps google-maps-markers google-maps-sdk-ios

我想显示自定义UIView而不是Google Maps Marker(iOS SDK)的默认UIView。 有一个属性可以设置图标但是图标在我的情况下是不够的。 我从后端收到一张图像,该图像应放在自定义标记内: enter image description here

我知道我可以完全修改MarkerInfoWindow,但这不是我需要的: custom-info-window-for-google-maps

如何覆盖标记视图?

3 个答案:

答案 0 :(得分:0)

事实证明,我必须只使用Icon属性。 为了实现我的目标,必须使用图形上下文将两个图像渲染成一个。

答案 1 :(得分:0)

Google地图GMSMarker有一个属性iconView,可让我们为标记设置自定义UIView。您需要创建xib,在其中可以管理来自后端的图像和要显示的其他数据。下面的代码段可用于设置自定义标记视图。

- (void)setCustomMarker {
   GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:51.5 longitude:-0.127 zoom:14];
  _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  self.view = _mapView;
  _mapView.delegate = self;
  UIImage *house = [UIImage imageNamed:@"House"];
  house = [house imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
  _londonView = [[UIImageView alloc] initWithImage:house];
  _londonView.tintColor = [UIColor redColor];
   CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
  _london = [GMSMarker markerWithPosition:position];
  _london.title = @"London";
  _london.iconView = _londonView;
  _london.tracksViewChanges = YES;
  _london.map = self.mapView;
}

在您的情况下,londonView应该是UIView,您可以将其设置为iconView属性。

Google maps implementation for custom marker section在实施时要考虑的事项。

答案 2 :(得分:0)

1。根据您的要求(使用.xib和.swift)文件创建自定义视图

MapIconView.swift和MapIconView.xib

class MapIconView: UIView {
    class func createMyClassView() -> MapIconView {
        let myClassNib = UINib(nibName: "MapIconView", bundle: nil)
        return myClassNib.instantiate(withOwner: nil, options: nil)[0] as! MapIconView
    }
}

2。设置自定义标记iconView

@IBOutlet weak var mapView: GMSMapView!

let markerView = MapIconView.createMyClassView()
marker.iconView =  markerView
marker.map = self.mapView

3。地面锚完全没有出现

marker.groundAnchor = CGPoint(x: 0.5, y: 0.5)