Настраиваемая аннотационная булавка меняется на красную булавку по умолчанию при длительном нажатии

У меня есть собственный аннотационный штифт в приложении:

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

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

- (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, но не выяснил. Если я просто коснусь аннотационной булавки, все будет работать нормально, и мой пользовательский вид аннотационной булавки не исчезнет. Вы можете увидеть, что я имею в виду на этом снимке экрана: полезное изображение с примером

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


person dive    schedule 24.11.2011    source источник


Ответы (1)


Итак, если вы хотите использовать пользовательское изображение для представления аннотаций, всегда используйте общий 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;
}
person dive    schedule 24.11.2011
comment
Работал как шарм. Дело в том, что представление MKPinAnnotation является подклассом представления MKPinAnnotation с функциональностью, которая вам не нужна. - person igraczech; 15.02.2014