我有一个使用 MapView 的应用程序,我正在上面添加自定义引脚注释。一切正常,但有时会显示另一张图像,我不知道为什么。我从 JSON API 获取数据,它们绝对正确(数据库几个月以来没有更改)。这是我在模型类上用来获取图像资源的函数:
+ (UIImage *)pinImageForType:(VTStationType)type {
NSString *imageName = nil;
switch (type) {
case kVTStationTypeOffstreetParking:
imageName = @"PinGarage.png";
break;
case kVTStationTypeOnstreetParking:
imageName = @"PinStreet.png";
break;
case kVTStationTypeCarwash:
imageName = @"PinCarwash.png";
break;
case kVTStationTypeParkAndRide:
imageName = @"PinPR.png";
break;
default:
return nil;
}
NSLog(@"Image name: %@", imageName);
return [UIImage imageNamed:imageName];
}
整个代码中没有其他方法可以获取图片资源。有趣的是,有时图像会发生变化,而我在日志中看不到此方法的调用。在我看来,这可能是某种记忆问题。能否请你帮忙?谢谢。
编辑
这是 viewForAnnotation 委托方法:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
} else if ([annotation isKindOfClass:[VTParkingZoneAnnotation class]]) {
NSLog(@"viewForAnnotation - ParkingZone - %@", annotation);
return [self parkingOrStationAnnotationView:annotation];
} else if ([annotation isKindOfClass:[VTStationAnnotation class]]) {
NSLog(@"viewForAnnotation - Station - %@", annotation);
return [self parkingOrStationAnnotationView:annotation];
} else if ([annotation isKindOfClass:[VTCalloutAnnotation class]]) {
return [self calloutAnnotationView:annotation];
} else {
return nil;
}
}
这是我创建视图的方法。calloutAnnotationView 是一个不同的注解,我们可以忽略它。这是parkingOrStationAnnotationView的方法:
- (MKAnnotationView *)parkingOrStationAnnotationView:(id<MKAnnotation>)annotation {
MKAnnotationView *pinView = (MKAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"AnnotationView"];
if (pinView) {
pinView.annotation = annotation;
return pinView;
}
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"AnnotationView"];
pinView.canShowCallout = NO;
if ([annotation isKindOfClass:[VTParkingZoneAnnotation class]]) {
pinView.image = ((VTParkingZoneAnnotation *)annotation).parkingZone.pinImage;
} else if ([annotation isKindOfClass:[VTStationAnnotation class]]) {
pinView.image = ((VTStationAnnotation *)annotation).station.pinImage;
}
return pinView;
}