我现在正在教自己在Objective C中使用MapKit。我已经到了可以自动缩放到包含多个注释的位置的地步。我用内置引脚表示注释。如果你点击图钉我有一个字母数字2字符串代表那个点。
我心想,为了更好的可用性,为什么不用实际数据替换引脚。有点像天气图,它们将温度显示为针。这可行吗?
我研究了这个,我能找到的就是:
- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation
{
static NSString *AnnotationViewID = @"annotationViewID";
MKAnnotationView *annotationView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
if (annotationView == nil) {
annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
}
annotationView.image = [UIImage imageNamed:@"location.png"];
annotationView.annotation = annotation;
return annotationView;
}
问题是我不能也不应该为两个字符的每个组合都有一个自定义图像。有没有办法让我在引脚的位置绘制这些数字。
我是在正确的轨道上。是否有一些我可以利用的完整示例来更好地理解流程。
我希望能够选择该自定义引脚,然后显示或显示更多详细信息。
感谢您的时间。
答案 0 :(得分:2)
安娜,谢谢你的链接,我尝试了它并且它有效。我做了一些改进以改善标签的美感,我想我会在此发表我的发现以供参考:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation { if([注释isKindOfClass:[MKUserLocation class]]) 返回零;
static NSString *reuseId = @"MapViewController";
MKAnnotationView *av = [mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
if (av == nil)
{
av = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
//UILabel *lbl = [[UILabel alloc] init];;
lbl.backgroundColor = [UIColor clearColor]; // This makes the background clear and just shows the text
lbl.textColor = [UIColor whiteColor]; // Use any colour you wish
lbl.alpha = 1.0; //0.5;
lbl.tag = 42;
lbl.font = [UIFont fontWithName:@"Helvetica-Bold" size:16.0]; // This is optional, I found this fond and size most readable
[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];
// I added this to the text to improve its visibility by essentially adding a stroke around the text. Well its a poor man's stroke by adding a shadow
lbl.layer.shadowColor = [[UIColor blackColor] CGColor];
lbl.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
lbl.layer.shadowOpacity = 1.0f;
lbl.layer.shadowRadius = 1.0f;
lbl.text = annotation.title;
return av;
}