0

私のプロジェクトでは、マップにこれらの情報を入力します

for  (int i = 0; i<arrayResults.count; i++){

        object = [arrayResults objectAtIndex:i];

        if ([[object iden]intValue] == 1) {

            type = @"type_one";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 2) {

          type = @"type_two";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 3) {

            type = @"type_three";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 4) {

            type = @"type_four";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

これらは、マップに追加する 4 種類のオブジェクトです

このメソッドの中に入ると

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

    MKAnnotationView *view = nil;
    if (annotation != mapView.userLocation) {

            if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 1){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_one"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_one"];
                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_one.png"];
                }

            }

            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 2){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_two"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_two"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_two.png"];
                }
            }
            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 3){


                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_three"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_three"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_three.png"];
                }

            }
            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 4){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_four"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_four"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(openScheda:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                  view.image = [UIImage imageNamed:@"type_four.png"];

                }
            }
countPoint++;
}

問題は、マーカーのタイプが配列要素に対応していないことです...しかし、私は理解していません。つまり、マーカーに「type_one」という画像がある場合、ポップアップで type_four の「title」が表示されます...対応していません

4

1 に答える 1

3

viewForAnnotation で適切な種類のビューを作成できるように、注釈はそれがどのような型であるかを「知る」必要があります。これを行うには、MKPointAnnotation をサブクラス化し、それに NSInteger 値を追加して配列インデックスを格納します。

MKPointAnnotation add extra propertyを参照してください。ただし、index と呼ばれる NSInteger プロパティを追加します。

注釈を作成するときは、次のプロパティを設定します。

for  (int i = 0; i<arrayResults.count; i++)
{
    object = [arrayResults objectAtIndex:i];

    CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

    // MKMyPointAnnotation is your MKPointAnnotation subclass
    MKMyPointAnnotation *annotationPoint = [[MKMyPointAnnotation alloc] init];
    annotationPoint.coordinate = annotationCoord;
    annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
    annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];

    annotationPoint.index = i;                                // store the index

    [map addAnnotation:annotationPoint];
}

次に、viewForAnnotation で、注釈をサブクラスにキャストし、型を逆参照します。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
{
 MKMyPointAnnotation *myAnnotation = (MKMyPointAnnotation *)annotation;
 object = [arrayResults objectAtIndex:myAnnotation.index];      // <-- your index property

 switch ([[object iden] intValue])
 {
  case 1:                                 // type one
    .
    .
    .

 }

.
.
.
}
于 2013-12-31T15:03:24.133 に答える