如何为MKAnnotationViews设置多个图像?

时间:2012-11-26 21:23:42

标签: objective-c image mkmapview mkannotationview

我正在开发一个使用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;
}

任何?

1 个答案:

答案 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//
}