10

我正在使用适用于 iOS 的 2013 版 Google Maps SDK。我想用另一个图标或周围的脉动圆圈为当前位置自定义默认蓝点。

我知道我们可以mapView:viewForAnnotation:在 MKMapView 中做到这一点,但我不知道如何使用谷歌地图做到这一点。

4

3 回答 3

15

当前版本的 SDK (1.4.3) 无法做到这一点,实际上这个请求存在一个未解决的问题:看这里

作为一种解决方法,您可以使用以下命令隐藏默认按钮:

 _map.myLocationEnabled = NO;

然后创建一个自定义GMSMarker

 GMSMarker *pointMarker = [GMSMarker markerWithPosition:currentPosition];
 pointMarker.icon = [UIImage imageNamed:@"YourImage"];
 pointMarker.map = _map;

并使用 a 更改它的位置CLLocationManager,因此它始终显示当前位置。这有点棘手,但我认为这是实现这一目标的唯一方法。如果您需要更完整的示例,请告诉我。

于 2013-08-22T01:03:26.613 回答
4

对于 Swift 4.0

设置 GMSMapView 时:

mapView.isMyLocationEnabled = false

当用户位置更新时:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    let userLocationMarker = GMSMarker(position: location.coordinate)
    userLocationMarker.icon = UIImage(named: "yourImageName")
    userLocationMarker.map = mapView   
}
于 2018-11-14T13:55:26.630 回答
3

斯威夫特 4

class MasterMapViewController: UIViewController, CLLocationManagerDelegate, GMSMapViewDelegate {

    let currentLocationMarker = GMSMarker()

    override func viewDidLoad() {
        super.viewDidLoad()
        addCurrentLocationMarker()
    }

    func addCurrentLocationMarker() {

        let currentLocationMarkerView = UIView()
        currentLocationMarkerView.frame.size = CGSize(width: 40, height: 40)
        currentLocationMarkerView.layer.cornerRadius = 40 / 4
        currentLocationMarkerView.clipsToBounds = true
        let currentLocationMarkerImageView = UIImageView(frame: currentLocationMarkerView.bounds)
        currentLocationMarkerImageView.contentMode = .scaleAspectFill
        currentLocationMarkerImageView.image = UIImage(named: "masterAvatar")
        currentLocationMarkerView.addSubview(currentLocationMarkerImageView)
        currentLocationMarker.iconView = currentLocationMarkerView
        currentLocationMarker.isTappable = false
        currentLocationMarker.map = mapView

    }

    // location manager delegate
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        let lastLocation = locations.last!
        currentLocationMarker.position =  lastLocation.coordinate    
    }

}

仅将此作为起点!这不是一个有吸引力的替代方案,因为不断更新标记在地图上的位置会影响性能。如果您要走这条路线,请找到一种方法,不要不断地从位置管理器代表处更新标记的位置。

于 2017-12-24T17:19:07.053 回答