Пользовательский штырь аннотации меняется на красный штифт по умолчанию при длительном нажатии - PullRequest
8 голосов
/ 24 ноября 2011

У меня есть пользовательский пин-код аннотации в приложении:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    return [kml viewForAnnotation:annotation type:state];
}

, где я возвращаю пользовательский вид и создаю setImage для аннотации Viewmark, такой как:

- (MKAnnotationView *)viewForAnnotation:(id <MKAnnotation>)point type:(int)state
{
    // Find the KMLPlacemark object that owns this point and get
    // the view from it.
    for (KMLPlacemark *placemark in _placemarks) {
        if ([placemark point] == point) 
        {
            UIButton *disclosureButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure]; 
            [[placemark annotationView] setCanShowCallout: YES];            
            [[placemark annotationView] setRightCalloutAccessoryView:disclosureButton];

            if (state == 0)
            {
                [[placemark annotationView] setImage:[UIImage imageNamed:@"ic_pin_tour.png"]];
            }
            else
            {
                [[placemark annotationView] setImage:[UIImage imageNamed:@"ic_pin_point.png"]];
            }

            return [placemark annotationView];
        }
    }
    return nil;
}

но если я долго нажму на свой штырь для аннотации, он изменит свой вид по умолчанию (RedPin). Я не могу понять, какой метод вызывается при длительном нажатии. Я пытался играть с UITapGestureRecognizer, но не узнал. Если я просто коснусь булавки аннотации, все будет хорошо, и мой пользовательский вид булавки аннотации не исчезнет. Вы можете видеть, что я имею в виду на этом скриншоте: so useful image with example

Итак, почему внешний вид аннотационного штифта изменяется при длинном нажатии?

1 Ответ

23 голосов
/ 24 ноября 2011

Итак, если вы хотите использовать пользовательское изображение для представления аннотации, всегда используйте общий MKAnnotationView вместо MKPinAnnotationView.У меня есть MKPinAnnotationView только в одном месте, когда я заменяю его на MKAnnotationView, теперь все работает правильно:

- (MKAnnotationView *)annotationView
{
    if (!annotationView) {
        id <MKAnnotation> annotation = [self point];
        if (annotation) {
            MKAnnotationView *pin =
                [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
            pin.canShowCallout = YES;
            annotationView = pin;
        }
    }
    return annotationView;
}
...