Có, có thể.
Trong MapKit trên iOS, bạn cần triển khai phương thức ủy quyền viewForAnnotation
và trả lại MKAnnotationView
bằng cách thêm UILabel
vào đó.
Ví dụ:
-(MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString *reuseId = @"reuseid";
MKAnnotationView *av = [mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
if (av == nil)
{
av = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId] autorelease];
UILabel *lbl = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 30)] autorelease];
lbl.backgroundColor = [UIColor blackColor];
lbl.textColor = [UIColor whiteColor];
lbl.alpha = 0.5;
lbl.tag = 42;
[av addSubview:lbl];
//Following lets the callout still work if you tap on the label...
av.canShowCallout = YES;
av.frame = lbl.frame;
}
else
{
av.annotation = annotation;
}
UILabel *lbl = (UILabel *)[av viewWithTag:42];
lbl.text = annotation.title;
return av;
}
Hãy chắc chắn rằng tài sản delegate
giao diện bản đồ được thiết lập bằng cách khác phương pháp đại biểu này sẽ không được gọi và bạn sẽ nhận được ghim màu đỏ mặc định để thay thế.
Xin chào, hãy thử giải thích thêm một chút. Có thể một số mã của những gì bạn đã thử. –