这是我在这个网站上的第一个问题。
我的代码使用iOS 6 Mapkit,Objective-C在以下函数中实现。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
我只有两个自定义图像注释。一个红色针脚,另一个是橙色针脚。红色引脚更接近用户在设备地图区域内的当前位置,另一个橙色引脚距离30英里(在当前地图上下文之外)。我根据每个引脚后面的数据使用不同的颜色。
问题:注释的自定义图像正在切换图像。
使用本网站上的所有提示,包括使用dequeueReusableAnnotationViewWithIdentifier等附加的是我的代码。
在app启动时地图的第一个显示屏上,我看到的错误是橙色图钉显示在设备地图上,红色图钉显示在外面。这是不正确的,因为红色图像应该显示在设备地图上。
if (PinColor == 0) {
MKAnnotationView* pinview = (MKAnnotationView *)[self._mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
if (nil == pinview) {
MKAnnotationView* view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"];
view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
view.opaque = YES;
view.image = [UIImage imageNamed:@"redpin.png"];
[view setCanShowCallout:YES];
if (self.newPinAdded) {
[view setSelected: YES];
}
return view;
}
return pinview;
}
else {
MKAnnotationView* pinview = (MKAnnotationView *)[self._mapView dequeueReusableAnnotationViewWithIdentifier:@"Orangeidentifier"];
if (nil == pinview) {
MKAnnotationView* view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Orangeidentifier"];
view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
view.image = [UIImage imageNamed:@"pin glabensmall.png"]; //orange pin
view.opaque = YES;
[view setCanShowCallout:YES];
if (self.newPinAdded) {
[view setSelected: YES];
}
return view;
}
return pinview;
}
答案 0 :(得分:1)
我认为你的问题很常见。 PinColor在哪里设置? mapview地图要求annotationView随时为任何注释绘制注释。如果通过其他方法将PinColor设置为0,然后mapview想要绘制注释任何注释,它将绘制一个红色引脚。您需要做的是检查您正在绘制的注释,然后使用正确的颜色。您可以通过阅读标题来检查注释,或者如果它是您自己的注释类,则可能还有其他属性可供您使用。
SideNote:对于两个引脚版本,你有几行重复,你应该在IF语句之外使用它们并删除一些行。你应该使用viewForAnnotation
给你的mapView:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation{
MKAnnotationView* pinview = nil;
if (annotation is the red one) {
pinview = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
if (nil == pinview) {
pinview = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"];
pinview.image = [UIImage imageNamed:@"redpin.png"];
}
} else {
pinview = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"Orangeidentifier"];
if (nil == pinview) {
pinview = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Orangeidentifier"];
pinview.image = [UIImage imageNamed:@"pin glabensmall.png"]; //orange pin
}
}
[pinview setCanShowCallout:YES];
pinview.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
pinview.opaque = YES;
if (self.newPinAdded) {
[pinview setSelected: YES];
}
}