2010-04-04 1 views
2

Я показываю пользовательские изображения на карте (вместо стандартных контактов), используя следующий код. Однако, когда я нажимаю на элемент (и появляется выноска), изображение возвращается к красному значку по умолчанию. Как я могу сохранить свой собственный образ, даже когда отображается выноска?Пользовательские аннотации Просмотр изображений возвращается к контактам при нажатии

- (MKAnnotationView *) mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    MKPinAnnotationView *pinAnnotation = nil; 

    if (annotation != mapView.userLocation) 
    { 
     static NSString *pinID = @"mapPin"; 
     pinAnnotation = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pinID]; 
     if (pinAnnotation == nil) 
      pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinID] autorelease]; 

     // Set the image 
     pinAnnotation.image = [UIImage imageNamed:@"TestIcon.png"]; 

     // Set ability to show callout 
     pinAnnotation.canShowCallout = YES; 

     // Set up the disclosure button on the right side 
     UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
     pinAnnotation.rightCalloutAccessoryView = infoButton; 

     [pinID release]; 
    } 

    return pinAnnotation; 
    [pinAnnotation release]; 
} 

ответ

5

я нашел, делая pinAnnotation MKAnnotationView, а не MKPinAnnotationView, я получил желаемый результат. Изображение больше не превращается в штырь

static NSString *pinID = @"mapPin"; 
    pinAnnotation = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:pinID]; 
    if (pinAnnotation == nil) 
     pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:pinID] autorelease]; 

    // Set the image 
    pinAnnotation.image = [UIImage imageNamed:@"TestIcon.png"]; 
0

Вам нужно использовать свойство subview, а не свойство изображения. Этот код succssfully решает эту проблему для меня:

UIImage * image = [UIImage imageNamed:@"blue_pin.png"]; 
    UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease]; 
    [annView addSubview:imageView]; 
Смежные вопросы