将引脚颜色添加到MKAnnotation

时间:2015-12-31 10:59:25

标签: ios objective-c mkannotation

我在地图上有一个按钮,指向" MyLocation"它的铁杆lat n lng。我想改变引脚颜色。尝试了一些但没有成功。这是代码。

- (IBAction)btnMylLocation:(UIButton *)sender {

CLLocationCoordinate2D coord = {.latitude =  18.520430, .longitude =  73.856744};
MKCoordinateSpan span = {.latitudeDelta =  0.2, .longitudeDelta =  0.2};
MKCoordinateRegion region = {coord, span};
[self.mapView setRegion:region];
CLLocationCoordinate2D annotationCoord;
annotationCoord.latitude = 18.520430;
annotationCoord.longitude = 73.856744;
self.lblLongitude.text = [NSString stringWithFormat:@"%f ", annotationCoord.latitude];
self.lblLatitude.text = [NSString stringWithFormat:@" %f", annotationCoord.longitude];
MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
annotationPoint.coordinate = annotationCoord;
annotationPoint.title = @"Mindbowser";
annotationPoint.subtitle = @"Pune Headquater's";
[_mapView addAnnotation:annotationPoint];
}

4 个答案:

答案 0 :(得分:4)

您需要实施map's delegate方法并设置delegate

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    // If it's the user location, just return nil.
  if ([annotation isKindOfClass:[MKUserLocation class]])
  return nil;

  // Handle any custom annotations.
  if ([annotation isKindOfClass:[MKPointAnnotation class]])
  {

  MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"CustomPinAnnotationView"];
  if (!pinView)
  {
    pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomPinAnnotationView"];
    pinView.canShowCallout = YES;
    pinView.pinColor = MKPinAnnotationColorGreen;
  }
  else {
    pinView.annotation = annotation;
  }

  return pinView;

  }

  return nil;
} 

viewDidLoad()中,编写以下代码

_mapView.delegate = self;

答案 1 :(得分:2)

这可能会对你有帮助。

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
MKPinAnnotationView *annotationView = nil;

if(![annotation isKindOfClass:[MKUserLocation class]]){

    annotationView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"pin"];
    annotationView.pinColor = MKPinAnnotationColorGreen;
}
return annotationView;
 }

答案 2 :(得分:1)

实现下面的委托方法,并通过分配iOS 9中提供的pinTintColor返回MKAnnotationView。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    static NSString *annotaionIdentifier=@"annotationIdentifier";
    MKPinAnnotationView *aView=(MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:annotaionIdentifier ];
    if (aView==nil) {

        aView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:annotaionIdentifier];
        aView.pinTintColor = [UIColor yellowColor];//from iOS 9, you can pass in any color you want.
        //aView.pinColor = MKPinAnnotationColorPurple //if iOS is less than 9.0
        aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        aView.animatesDrop=TRUE;
        aView.canShowCallout = YES;
        aView.calloutOffset = CGPointMake(-5, 5);
    }

    return aView;
}

答案 3 :(得分:0)

要在添加注释时更改颜色,请检查以下方法。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation 
(id<MKAnnotation>)annotation {

    static NSString *identifier = @"PinAnnotationIdentifier";
    MKPinAnnotationView *pinAnnotation = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if(!pinAnnotation) {
        pinAnnotation = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
    }
    pinAnnotation.pinColor = MKPinAnnotationColorGreen;  //Color

    return pinAnnotation;
}

使用以下方法在选择和取消选择时更改颜色。

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKPinAnnotationView *)view {
    view.pinColor = MKPinAnnotationColorRed;
}

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKPinAnnotationView *)view {        
    view.pinColor = MKPinAnnotationColorGreen;
}