设置MKA注释的图像 [英] Setting image for MKAnnotation

查看:75
本文介绍了设置MKA注释的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下代码在地图视图中添加了MKAnnotation.

I added MKAnnotation in my mapview using the following code.

Flag *flag = [[Flag alloc] init]; 
flag.title = @"Golf Course";
flag.subtitle = @"Green"; 
flag.coordinate =CLLocationCoordinate2DMake(28.457394,77.108667);
[mapView addAnnotation:flag];

并且正在将图像设置为

 -(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
 (id <MKAnnotation>)annotation 
 {
   if(([annotation isKindOfClass:[Flag class]])) 
   {
      MKPinAnnotationView *pinView = nil; 
      if(annotation != mapView.userLocation) 
      {
        static NSString *defaultPinID = @"PinId1";
        pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinView == nil ) pinView = [[[MKPinAnnotationView alloc]
                                          initWithAnnotation:annotation reuseIdentifier:@"pin1"] autorelease];

        //pinView= [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin1"];

        pinView.canShowCallout = YES;
               pinView.draggable = YES;
        [pinView setImage:[UIImage imageNamed:@"flag2.png"]];

     } 
     else 
     {
        [mapView.userLocation setTitle:@"I am here"];
     }

   }
    return pinView;
 }

但没有获取MKAnnoation的图像.这是怎么回事?请帮助我.

but am not getting the image for MKAnnoation.What is wrong am doing?Please help me.

推荐答案

我遇到了同样的问题.现在使用如下所示的工作版本.

I have the same issue. Now using the working version as given below.

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    if ([annotation isKindOfClass:[Annotation class]])
    {
        static NSString* SFAnnotationIdentifier = @"SFAnnotationIdentifier";
        MKPinAnnotationView* pinView =
        (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier];
        if (!pinView)
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:SFAnnotationIdentifier] autorelease];
            annotationView.canShowCallout = YES;

            UIImage *flagImage = [UIImage imageNamed:@"map_pin.png"];

            CGRect resizeRect;

            resizeRect.size = flagImage.size;
            CGSize maxSize = CGRectInset(self.view.bounds,
                                         10.5,
                                         10.5).size;
            maxSize.height -= self.navigationController.navigationBar.frame.size.height + 40.0;
            if (resizeRect.size.width > maxSize.width)
                resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height / resizeRect.size.width * maxSize.width);
            if (resizeRect.size.height > maxSize.height)
                resizeRect.size = CGSizeMake(resizeRect.size.width / resizeRect.size.height * maxSize.height, maxSize.height);

            resizeRect.origin = (CGPoint){0.0f, 0.0f};
            UIGraphicsBeginImageContext(resizeRect.size);
            [flagImage drawInRect:resizeRect];
            UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            annotationView.image = resizedImage;
            annotationView.opaque = NO;

            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

            Annotation *annoterObject = (Annotation *) annotation;

            rightButton.tag = annoterObject.annoteCount;

            [rightButton addTarget:self
                            action:@selector(showDetails:)
                  forControlEvents:UIControlEventTouchUpInside];
            annotationView.rightCalloutAccessoryView = rightButton;

            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
    }

    return nil;

}

这是工作代码.

这篇关于设置MKA注释的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆