如何将MKMapView的用户位置蓝点更改为select的图像?

是否有可能将指示用户在MKMapView的位置的蓝点变成图像? 例如一个小汽车或任何.png图像?

在这里输入图像说明

MKMapViewDelegate viewForAnnotation:方法可能你会有这样的代码。

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { if (annotation == mapView.userLocation) return nil; ... 

如果注释userLocation ,则返回nil ,以使mapView显示蓝色圆点和圆形animation。 为了显示我们的自定义注释userLocation只是删除行return nil; 并在那里做你的定制。

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { static NSString* AnnotationIdentifier = @"Annotation"; MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier]; if (!pinView) { MKPinAnnotationView *customPinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease]; if (annotation == mapView.userLocation){ customPinView.image = [UIImage imageNamed:@"myCarImage.png"]; } else{ customPinView.image = [UIImage imageNamed:@"mySomeOtherImage.png"]; } customPinView.animatesDrop = NO; customPinView.canShowCallout = YES; return customPinView; } else { pinView.annotation = annotation; } return pinView; } 

这里是你可能有多个引脚的Swift 2.0版本。

在这个代码中,CustomAnnotation只是一个MKAnnotation子类。 基本上,如果注释不是你的自定义类的一种,那么它的用户位置引脚。

 func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { // This is false if its a user pin if(annotation.isKindOfClass(CustomAnnotation) == false) { let userPin = "userLocation" if let dequeuedView = _view.mapView().dequeueReusableAnnotationViewWithIdentifier(userPin) { return dequeuedView } else { let mkAnnotationView:MKAnnotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: userPin) mkAnnotationView.image = UIImage(named: C_GPS.ROUTE_WALK_ICON_NAME) let offset:CGPoint = CGPoint(x: 0, y: -mkAnnotationView.image!.size.height / 2) mkAnnotationView.centerOffset = offset return mkAnnotationView } } let annotation = annotation as? CustomAnnotation if(annotation == nil) { return nil } let endPointsIdentifier = "endPoint" if let dequeuedView = _view.mapView().dequeueReusableAnnotationViewWithIdentifier(endPointsIdentifier) { dequeuedView.image = annotation!.uiimage return dequeuedView } else { let mkAnnotationView:MKAnnotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: endPointsIdentifier) mkAnnotationView.image = annotation!.uiimage let offset:CGPoint = CGPoint(x: 0, y: -mkAnnotationView.image!.size.height / 2) mkAnnotationView.centerOffset = offset let gesture = UITapGestureRecognizer(target: self, action: "routeTouched:") mkAnnotationView.addGestureRecognizer(gesture) return mkAnnotationView } } 

好的,这里是Swift版本:

 func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { let identifier = "User" var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier) if annotationView == nil{ annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier) annotationView.canShowCallout = true } else { annotationView.annotation = annotation } annotationView.image = UIImage(named: "image") return annotationView } 

这是改变当前位置的蓝点?

 func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { let identifier = "User" var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier) if annotationView == nil{ annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier) annotationView.canShowCallout = true } else { annotationView.annotation = annotation } annotationView.image = UIImage(named: "image") return annotationView } 

请尝试这样的事情。 它在Xcode 7和Swift 2中为我工作。

  func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { // want to show a custom image if the annotation is the user's location. guard !annotation.isKindOfClass(MKUserLocation) else { let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "userLocation") annotationView.image = UIImage(named: "icon_coordinates_self") return annotationView //return nil } // for other annotation except current location let annotationIdentifier = "AnnotationIdentifier" var annotationView: MKAnnotationView? if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(annotationIdentifier) { annotationView = dequeuedAnnotationView annotationView?.annotation = annotation } else { let av = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier) av.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure) annotationView = av } if let annotationView = annotationView { // Configure your annotation view here annotationView.canShowCallout = true annotationView.image = UIImage(named: "Annotation_map") } return annotationView }