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

此搜索图像在这里

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

我怎样才能在MKMapkit框架的注解中赋值?

您可以使用自定义视图为每个注释与一个UIView ,一个UIImageView和一个标签显示不同的值。 这将在方法内完成- (MKAnnotationView *)mapView:(MKMapView *)newMapView viewForAnnotation:(id )newAnnotation 。 你必须把UIView的大小变成双倍大小的透明颜色,以便更精确地查看放大和缩小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; } 

希望这可以帮助。

  1. 创build一个自定义的Annotation类( MKAnnotation
  2. 创build一个自定义的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; } 

    我的自定义注释类是“注释”,自定义注释视图类是“CustomAnnotation”。 根据你的需要改变。

之后,只需创build一个Annotation类的对象,然后使用它。

编辑:

确保您在自定义注释视图类中重写了以下follwing方法:

在.h:

 - (id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier; 

在.m中:

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

}

编辑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];