1

MKMapViewを使ったアプリを作っています。カスタムピンを追加します (画像あり)。そして、ズームインしてからズームアウトすると、ピンがデフォルト (赤色) に戻ります。

これが私のコードです:

    - (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
    {
        static NSString* SFAnnotationIdentifier = @"Kamera";
        MKPinAnnotationView* pinView =
        (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier];
        if (!pinView)
        {
            MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:SFAnnotationIdentifier];
            annotationView.canShowCallout = NO;

            UIImage *flagImage = [UIImage imageNamed:@"pinModer.png"];

            CGRect resizeRect;

            resizeRect.size = flagImage.size;
            resizeRect.size = CGSizeMake(40, 60);
            resizeRect.origin = (CGPoint){0.0f, 0.0f};
            UIGraphicsBeginImageContext(resizeRect.size);
            [flagImage drawInRect:resizeRect];
            UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            annotationView.image = resizedImage;
            annotationView.opaque = NO;

            UIImageView *sfIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"kameraNaprejModra.png"]];
            annotationView.leftCalloutAccessoryView = sfIconView;

            return annotationView;

    }    
    return nil;
}
4

1 に答える 1

1

このコードは、dequeueが非 nil を返すケースを処理していませんpinView(以前の注釈ビューを再利用していることを意味します)。

pinViewでない場合nil、メソッドnilは注釈ビューに戻る最後の行で終了します。

に戻るnilと、マップ ビューは赤いピンであるデフォルトの注釈ビューを描画します。


次のようにコードを調整します。

if (!pinView)
{
    //no changes to code inside this if
    //...
    return annotationView;
}
//add an else part and return pinView instead of nil...
else
{
    pinView.annotation = annotation;
}

return pinView;
于 2012-11-02T15:52:22.613 に答える