1

カスタム注釈画像を作成するためにこのコードを作成しました

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    static NSString *google = @"googlePin";
    if ([annotation isKindOfClass:[myClass class]])
    {
        MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:google];
        if (!annotationView)
        {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:google];
            annotationView.image = [UIImage imageNamed:@"pin.png"];
        }
        return annotationView;
    }
    return nil;

}

画像が地図に表示されています。ただし、クリックしても何も起こらず、タイトルも字幕もありません。

何か考えがありますか?

4

1 に答える 1

12

をオーバーライドするときviewForAnnotationは、に設定canShowCalloutする必要がありYESます(alloc / initを使用する新しいビューのデフォルトはNO)です。

そのデリゲートメソッドをオーバーライドしない場合、マップビューは、canShowCalloutすでにに設定されているデフォルトの赤いピンを作成しますYES

ただし、にcanShowCallout設定されていても、注釈が空白または空白(空の文字列)YESの場合、コールアウトは表示されませんtitlenil

(ただし、が空白でtitleない場合は、そうでない限り、コールアウトは表示されません。)nilcanShowCalloutYES

MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:google];
if (!annotationView)
{
    annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:google];
    annotationView.image = [UIImage imageNamed:@"pin.png"];
    annotationView.canShowCallout = YES;  // <-- add this
}
else
{
    // unrelated but should handle view re-use...
    annotationView.annotation = annotation; 
}

return annotationView;
于 2012-07-03T14:28:55.863 に答える