gpt4 book ai didi

objective-c - iOS SDK 自定义图钉图像在 MapView 上随机更改

转载 作者:行者123 更新时间:2023-11-29 04:24:35 25 4
gpt4 key购买 nike

我有一个使用 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 委托(delegate)方法:

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

}
}

这是我创建 View 的方法。 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;
}

最佳答案

在 parkingOrStationAnnotationView 中,即使重用现有的annotationView,也应该设置图像。

关于objective-c - iOS SDK 自定义图钉图像在 MapView 上随机更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12516258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com