为当前位置自定义Google地图蓝点

时间:2013-08-20 09:05:43

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

我正在使用2013版Google Maps SDK for iOS。我想用另一个图标或脉冲圈来自定义当前位置的默认蓝点。

我知道我们可以在MKMapView中使用mapView:viewForAnnotation:执行此操作,但我无法了解如何使用Google地图执行此操作。

3 个答案:

答案 0 :(得分:14)

当前版本的SDK(1.4.3)无法执行此操作,实际上此请求存在未解决的问题:Look here

作为解决方法,您可以隐藏默认按钮:

 _map.myLocationEnabled = NO;

然后创建自定义GMSMarker

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

并使用CLLocationManager更改它的位置,因此它始终显示当前位置。它有点棘手,但我能想到的唯一方法是你可以做到这一点。如果您需要更完整的示例,请告诉我。

答案 1 :(得分:2)

Swift 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    
    }

}

仅将此作为起点!这不是一个有吸引力的选择,因为标记在地图上的位置不断更新会带来性能损失。如果您要走这条路线,找到一种方法,不要经常从位置经理代表那里更新标记的位置。

答案 2 :(得分:0)

对于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   
}