我正在使用2013版Google Maps SDK for iOS。我想用另一个图标或脉冲圈来自定义当前位置的默认蓝点。
我知道我们可以在MKMapView中使用mapView:viewForAnnotation:
执行此操作,但我无法了解如何使用Google地图执行此操作。
答案 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
}