1

私は現在の場所とランダムな5つのポイントを次のように表示しようとしています:

- (void)viewDidLoad {
    [super viewDidLoad];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];
    otherlat = [NSNumber numberWithDouble:[currentLatitude doubleValue]];
    otherlong = [NSNumber numberWithDouble:[currentLongitude doubleValue]];

    [self.mapView setShowsUserLocation:YES];
    mapView.delegate = self;

    longi = [[NSMutableArray alloc] init];
    lati = [[NSMutableArray alloc] init];

    NSMutableArray *la = [[NSMutableArray alloc] init];
    NSMutableArray *lo = [[NSMutableArray alloc] init];
    la = [NSMutableArray arrayWithObjects:@"20", @"21", @"42", @"51", @"75", nil];
    lo = [NSMutableArray arrayWithObjects:@"60", @"21", @"82", @"181", @"35", nil];

    for (int x = 0; x < [la count]; x++) {
        otherlat = [NSNumber numberWithDouble:[[la objectAtIndex:x] doubleValue]];
        otherlong = [NSNumber numberWithDouble:[[lo objectAtIndex:x] doubleValue]];
        [longi addObject:otherlong];
        [lati addObject:otherlat];
    }

    myAnnotation *myAnnotation1 = [[myAnnotation alloc] init];
    for (int y = 0; y < [lati count]; y++) {  
        CLLocationCoordinate2D theCoordinate;
        theCoordinate.latitude = [[lati objectAtIndex:y] doubleValue];
        theCoordinate.longitude = [[longi objectAtIndex:y] doubleValue];

        myAnnotation1.coordinate = theCoordinate;
        [mapView addAnnotation:myAnnotation1];
    }
}

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation {
    if ([annotation isKindOfClass:[MKUserLocation class]])
    return nil;

    static NSString *myAnnotationIdentifier = @"AnnotationIdentifier";
    MKPinAnnotationView *customPinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:myAnnotationIdentifier];
    customPinView.image = [UIImage imageNamed:@"purplepin.png"];
    customPinView.animatesDrop = YES;
    customPinView.canShowCallout = YES;

    return customPinView;
}

ただし、マップビューには現在の場所のみが表示され、他の 5 つの場所は表示されません。他の 5 つの場所が表示されない理由がわかりません。

  [mapView addAnnotation:myAnnotation1];
4

1 に答える 1

1

注釈を 1 つだけ追加します。5 回実行しますが、常に前の座標を上書きします。

//only 1 is allocated and then used/modified in every iteration of the loop!
myAnnotation* myAnnotation1=[[myAnnotation alloc] init];
for (int y =0; y < [lati count]; y++) {  
    ....

1 つの myAnnotation1 ではなく、..... 5 つの個別のものを作成する必要があります。

//allocate & add in each iteration of the loop!
for (int y =0; y < [lati count]; y++) {  
    myAnnotation* myAnnotation1=[[myAnnotation alloc] init];
    ....
于 2013-05-19T02:15:12.330 に答える