如何在Mapview中添加带有图像和标签的注释?

201*_*014 4 annotations map ios

此搜索 图像在这里

我在我的iPhone应用程序中使用MKMapview.

如何在MKMapkit Framework中的注释中指定值?

iEi*_*ein 16

您可以为每个注释使用自定义视图,使用一个UIView,一个UIImageView和一个Label来显示不同的值.这将在该方法中完成- (MKAnnotationView *)mapView:(MKMapView *)newMapView viewForAnnotation:(id )newAnnotation.您必须UIView采用透明色的双倍大小,以便UIImageView在mapview中进行更精确的放大和缩小视图.

码 - - -

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    static NSString * const kPinAnnotationIdentifier = @"PinIdentifier";
    if(annotation == self._mapView.userLocation)
    {
        return nil;
    }

    MyAnnotation *myAnnotation  = (MyAnnotation *)annotation;
    MKAnnotationView *newAnnotation = (MKAnnotationView*)[self._mapView dequeueReusableAnnotationViewWithIdentifier:kPinAnnotationIdentifier];

    if(!newAnnotation){
        newAnnotation = [[MKAnnotationView alloc] initWithAnnotation:myAnnotation reuseIdentifier:@"userloc"];
    }

    NSDictionary *dict=[alertInfoArray objectAtIndex:myAnnotation.ann_tag];
    UIView *anView=[[UIView alloc] init];
    anView.backgroundColor=[UIColor clearColor];

    UIImageView *bgImg=[[UIImageView alloc] init];
    bgImg.image=[UIImage imageNamed:@""];
    bgImg.backgroundColor=[UIColor clearColor];

    UIImageView *imgView=[[UIImageView alloc] init];
    imgView.tag=myAnnotation.ann_tag;

    UILabel *lblName=[[UILabel alloc] init];
    lblName.font=[UIFont systemFontOfSize:12];
    lblName.textAlignment=UITextAlignmentCenter;
    lblName.textColor=[UIColor whiteColor];
    lblName.backgroundColor=[UIColor clearColor];
    lblName.text=TEXT YOU WANT ;

    newAnnotation.frame=CGRectMake(0, 0, 70, 212);
    anView.frame=CGRectMake(0, 0, 70, 212);
    bgImg.frame=CGRectMake(0, 0, 70, 106);
    bgImg.image=[UIImage imageNamed:@"thumb-needhelp.png"];

    imgView.frame=CGRectMake(8,25,55,48);
    imgView.image=[UIImage imageNamed:@"girl-default.png"];
    lblName.frame=CGRectMake(5,79,60,10);



    [anView addSubview:bgImg];
    [bgImg release];
    [anView addSubview:imgView];
    [imgView release];
    [newAnnotation addSubview:anView];
    [anView release];

    newAnnotation.canShowCallout=YES;
    [newAnnotation setEnabled:YES];

    return newAnnotation;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 存储在alertInfoArray中的数据格式是什么,我们可以在哪个函数中为注释添加标记 (2认同)

n00*_*mer 6

  1. 创建自定义Annotation类(MKAnnotation)
  2. 创建自定义AnnotationView类(MKAnnotationView)

确保在类中将标题,背景图像和自定义注释的其他元素定义AnnotationView为属性.

  1. 重写以下方法,并设置您在AnnotationView类中定义的属性的值.

    - (MKAnnotationView*) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    
    if ([<Object of CustomAnnotation class> isKindOfClass:[MKUserLocation class]])
        return nil;
    
    CustomAnnotation* custom_anno = (CustomAnnotation*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"custom_annotation"];
    
    if (!custom_anno){
    custom_anno = [[CustomAnnotation alloc] initWithAnnotation:annotation reuseIdentifier:@"custom_annotation"];
    custom_anno.frame = CGRectMake(0, 0, 250, 57.5);
    
    custom_anno.canShowCallout = NO;//CHange if you want to change callout behaviour (thats is it's abilty to apper). I set it top no because i did not want a callout.
    
    UIImageView* icon = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 40, 40)];
    [icon setImageWithURL:<your image> placeholderImage:<your placeholder image>];//placeholder image = nil if you do not want one.
    icon.backgroundColor = [UIColor lightGrayColor];
    
    UILabel* name = [[UILabel alloc] initWithFrame:CGRectMake(50, 5, 200, 20)];
    name.text = nameValue;
    
    UILabel* category = [[UILabel alloc] initWithFrame:CGRectMake(50, 25, 200, 20)];
    category.text = otherValue;
    
    [custom_anno addSubview:icon];
    [custom_anno addSubview:name];
    [custom_anno addSubview:category];
    }
    return custom_anno;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    我的自定义注释类是"注释",自定义注释视图类是"CustomAnnotation".根据您的需要改变.

在此之后,只需创建Annotation类的对象,然后使用它.

编辑:

确保在自定义注释视图类中覆盖以下方法:

在.h:

- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier;
Run Code Online (Sandbox Code Playgroud)

在.m:

- (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if (self) {
}
return self;
Run Code Online (Sandbox Code Playgroud)

}

编辑2:

您可以在视图控制器中使用它,如下所示:

MKMapView* cellMap = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 290, 100)];
cellMap.delegate = self;
cellMap.userInteractionEnabled = NO;

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(<your coordinates>);
MKCoordinateSpan span = MKCoordinateSpanMake(0.04, 0.04);
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);
cellMap.showsUserLocation = NO;
[cellMap setRegion:region animated:YES];

Annotation* anon = [[Annotation alloc] init];
anon.coordinate = center;

[cellMap addAnnotation:anon];
[checkIn addSubview:cellMap];
Run Code Online (Sandbox Code Playgroud)