0

我正在开发一个使用 MapKit 类 Mkannotation 和 MKAnnotationView 的应用程序(当然都是子类)。

我的问题是,如何在我的地图上放置多个 FGAnnotationViews(大约 5 个),它们都有不同的图像?

我知道我可以创建 5 个不同的新类并初始化一个匹配,但我想,也许有一种方法可以在

- (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;
}

任何人?

4

1 回答 1

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。如果是,那么你返回 nil。如果您有每个注释类的多个实例,则可以使用该类来确定要设置的图像,而不是匹配对象本身,如下所示:

if ([annotation isKindOfClass:[MKUserLocation class]]) {
    return nil;
} else if ([annotation isKindOfClass:[FGRestaurantAnnotation class]]) {
    fgAnnView.image = //YOUR IMAGE CODE//
}
于 2012-11-26T22:16:50.530 回答