web-dev-qa-db-ja.com

カスタムMKAnnotationViewとカスタムアノテーションのタイトルとサブタイトルを作成する方法

enter image description here

MKMapViewで上記の注釈ビューを作成する必要があります。カスタムアノテーションビューを作成することはできますが、アノテーションをタップすると、その大きなテキストを含む画像を開く必要があり、それを作成することはできません。このタスクを実行するためのリンクまたは方法を提供してください。

18
Abhishek

カスタム注釈ビュー(標準ピンの代替)を作成するには、 imageMKAnnotationView プロパティを設定するだけです。 viewForAnnotation メソッド:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
    {
        return nil;
    }
    else if ([annotation isKindOfClass:[YourAnnotationClassHere class]]) // use whatever annotation class you used when creating the annotation
    {
        static NSString * const identifier = @"MyCustomAnnotation";

        MKAnnotationView* annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

        if (annotationView)
        {
            annotationView.annotation = annotation;
        }
        else
        {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation
                                                          reuseIdentifier:identifier];
        }

        annotationView.canShowCallout = NO; // set to YES if using customized rendition of standard callout; set to NO if creating your own callout from scratch
        annotationView.image = [UIImage imageNamed:@"your-image-here.png"];

        return annotationView;
    }
    return nil;
}

centerOffset プロパティを調整して、ピンを希望どおりに正確に並べることもできます。

コールアウトのカスタマイズに関して、最も簡単なアプローチは、leftCalloutAccessoryViewrightCalloutAccessoryView、および/またはdetailCalloutAccessoryViewを指定することです。これにより、驚くほどのコントロールが可能になり、あらゆる種類の画像、ラベルなどを追加できます。

コールアウトの根本的な再設計を行う場合は、viewForAnnotationcanShowCalloutNOに設定してから、カスタム注釈ビューで setSelected に応答して、独自のコールアウトを表示できます。 Swiftで、コールアウトをカスタマイズするためのいくつかのオプションについては、 MKA注釈コールアウトビューのカスタマイズ? を参照してください。

37
Rob