长按时自定义注释引脚更改为默认红色引脚

时间:2011-11-24 12:39:17

标签: iphone ios google-maps mkmapview mkpinannotationview

我在app上有自定义注释引脚:

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

我返回自定义视图并为Placemark的annotationView创建setImage,例如:

- (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 个答案:

答案 0 :(得分:23)

因此,如果要将自定义图像用于注释视图,请始终使用通用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;
}