【发布时间】:2015-05-12 10:13:44
【问题描述】:
当通过模拟器测试地图时,我注意到一些注释显示默认图钉而不是自定义图像。当我回到应用程序主菜单并再次进入地图视图时,不同的注释会发生同样的事情。
此代码显示了我拥有的 20 个注释中的 4 个,它们都使用相同的代码。
-(void)viewDidLoad {
[super viewDidLoad];
_locationManager = [[CLLocationManager alloc] init];
[mapView setDelegate:self];
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
MKCoordinateRegion test1 = { {0.0, 0.0} , {0.0, 0.0} };
test1.center.latitude = 55.705609;
test1.center.longitude = 13.195707;
[mapView setRegion:test1 animated:YES];
testmap *ann2 = [[testmap alloc] init];
ann2.title = @"test1";
ann2.subtitle = @"Klicka här för mer info";
ann2.coordinate = test1.center;
ann2.name = @"test1";
[mapView addAnnotation:ann2];
MKCoordinateRegion test2 = { {0.0, 0.0} , {0.0, 0.0} }; //ändra ner
test2.center.latitude = 55.710113;
test2.center.longitude = 13.213500;
[mapView setRegion:test2 animated:YES];
testmap *ann3 = [[testmap alloc] init];
ann3.title = @"test2";
ann3.subtitle = @"Klicka här för mer info";
ann3.coordinate = test2.center;
ann3.name = @"test2";
[mapView addAnnotation:ann3];
MKCoordinateRegion test3 = { {0.0, 0.0} , {0.0, 0.0} };
test3.center.latitude = 55.708981;
test3.center.longitude = 13.197266;
[mapView setRegion:test3 animated:YES];
testmap *ann4 = [[testmap alloc] init];
ann4.title = @"test3";
ann4.subtitle = @"Klicka här för mer info";
ann4.coordinate = test3.center;
ann4.name = @"test3";
[mapView addAnnotation:ann4];
MKCoordinateRegion test4 = { {0.0, 0.0} , {0.0, 0.0} }; //ändra ner
test4.center.latitude = 55.705170;
test4.center.longitude = 13.191277;
[mapView setRegion:test4 animated:YES];
testmap *ann5 = [[testmap alloc] init];
ann5.title = @"test4";
ann5.subtitle = @"Klicka här för mer info";
ann5.coordinate = test4.center;
ann5.name = @"test4";
[mapView addAnnotation:ann5];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id <MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
if(annotationView)
return nil;
else
{
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:AnnotationIdentifier]; annotationView.canShowCallout = YES;
NSString* thisModelName = ((testmap*)annotation).name;
if ([thisModelName isEqualToString:@"test1"]) {
annotationView.image = [UIImage imageNamed:@"test1"];
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView = rightButton;
annotationView.canShowCallout = YES;
annotationView.draggable = YES;
annotationView.highlighted = YES;
return annotationView;
}
else if ([thisModelName isEqualToString:@"test2"])
{
annotationView.image = [UIImage imageNamed:@"test2"];
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self action:@selector(myButton:) forControlEvents:UIControlEventTouchUpInside];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView = rightButton;
annotationView.canShowCallout = YES;
annotationView.draggable = YES;
annotationView.highlighted = YES;
return annotationView;
}
else if ([thisModelName isEqualToString:@"test3"])
{
annotationView.image = [UIImage imageNamed:@"test3"];
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self action:@selector(myButton:) forControlEvents:UIControlEventTouchUpInside];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView = rightButton;
annotationView.canShowCallout = YES;
annotationView.draggable = YES;
annotationView.highlighted = YES;
return annotationView;
}
else if ([thisModelName isEqualToString:@"test4"])
{
annotationView.image = [UIImage imageNamed:@"test4"];
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self action:@selector(myButton:) forControlEvents:UIControlEventTouchUpInside];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView = rightButton;
annotationView.canShowCallout = YES;
annotationView.draggable = YES;
annotationView.highlighted = YES;
return annotationView;
}
}
return nil;
}
【问题讨论】:
-
这个问题是不是来自if和else?
-
不需要为了设置注解坐标而创建和设置区域。你可以做
ann2.coordinate = CLLocationCoordinate2DMake(55.705609, 13.195707);。在添加所有注释后仅调用一次 setRegion(或 showAnnotations)以在地图上显示该区域。
标签: ios mapkit mkannotationview