如何在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; }
希望这可以帮助。
- 创build一个自定义的Annotation类(
MKAnnotation
) - 创build一个自定义的AnnotationView类(
MKAnnotationView
)
确保将AnnotationView
类中的标题,背景图像和其他自定义注释元素定义为属性。
-
覆盖以下方法,并设置您在
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];