我正在开发一个使用MapKit Classes Mkannotation和MKAnnotationView的应用程序(当然,这两个都是子类)。
我的问题是,如何在我的地图上放置多个FGAnnotationView(大约5个),它们都有不同的图像?
我知道我可以创建5个不同的新类并初始化一个匹配,但我想,也许有一种方法可以在
中放置一个if语句- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
功能,如
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKAnnotationView *annView = nil;
if (annotation == myRestaurantAnnotation) {
FGAnnotationView *fgAnnView = (FGAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Location"];
fgAnnView = [[FGAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Location"];
}
return annView;
}
任何?
答案 0 :(得分:2)
你快到了。试试这个
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKAnnotationView *annView = nil;
FGAnnotationView *fgAnnView = (FGAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Location"];
if (annotation == myRestaurantAnnotation) {
fgAnnView.image = //MAGIC GOES HERE//;
} else if (annotation == myBankAnnotation) {
fgAnnView.image = //MAGIC GOES HERE//;
}
return fgAnnView;
}
如果您要让地图绘制用户的位置,则应检查注释的类并确保它不是MKUserLocation。如果是,那么你返回零。如果每个注释类有多个实例,则可以使用该类来确定要设置的图像,而不是匹配对象本身,如下所示:
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
} else if ([annotation isKindOfClass:[FGRestaurantAnnotation class]]) {
fgAnnView.image = //YOUR IMAGE CODE//
}