【发布时间】:2012-12-06 14:01:35
【问题描述】:
我使用了注释图并为图钉使用了不止一张图像,但每当我放大或缩小时,它会将所有图钉更改为一张图像。
我从 Web 服务获取位置并识别它们,我使用字符串 (CustAttr) 作为“T”或“P”。
问题是来自网络服务的最后一次调用是CustAttr = T,当我放大或缩小时,它会调用mapView viewForAnnotation 方法并将它们全部绘制为T 和所有P 引脚变了。
这是该方法的代码:
-(MKAnnotationView*) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}
static NSString* AnnotationIndentifer = @"AnnotationIdentifier";
if ([custAttr isEqualToString:@"T"]) // ATMs
{
MKAnnotationView* pinView;
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIndentifer];
MapAnnotation* mapAnnotation = annotation;
pinView.canShowCallout = YES;
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
pinView.rightCalloutAccessoryView = rightButton;
if (mapAnnotation.isClosest) {
pinView.image = [UIImage imageNamed:@"Closest_ATM.png"];
}
if (mapAnnotation.isOffline) {
pinView.image = [UIImage imageNamed:@"Offline_ATM.png"];
}
pinView.annotation = annotation;
return pinView;
}else if ([custAttr isEqualToString:@"P"]) // POIs
{
MKAnnotationView* pinView;
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIndentifer];
pinView.canShowCallout = YES;
pinView.image = [UIImage imageNamed:@"Location_POI.png"];
pinView.annotation = annotation;
return pinView;
}
return nil;
}
我该如何解决这个问题?有没有一种方法可以阻止它在放大/缩小时调用此方法,或者是否有另一种方法可以让它像在同一图像中一样再次绘制它们?
【问题讨论】:
-
措辞不同,但基本问题相同stackoverflow.com/questions/12210860/…
标签: iphone objective-c ios mkmapview mkannotationview