Как обновить / изменить цвет булавки после того, как она уже была добавлена ​​в мой просмотр карты? - PullRequest
1 голос
/ 14 апреля 2011

Я делаю аппликацию, которая помещает булавки / аннотации в вид карты.Когда пользователь приближается к булавке, я хочу, чтобы штифт изменил цвет.Все работает отлично, контакты размещены там, где я хочу, и я получаю предупреждение, когда подхожу достаточно близко.Но я не уверен, как обновить цвет булавки.Нужно ли удалять аннотации и заменять их?Кажется ненужным, все, что я ищу, это что-то вроде обновить / обновить вид карты без необходимости заменять аннотации .

CLLocation *place =[[CLLocation alloc] initWithCoordinate:location altitude:1 horizontalAccuracy:1 verticalAccuracy:-1 timestamp:nil];
    AddresAnnotation *ann = [[AddresAnnotation alloc] initWithCoordinate:place.coordinate];
    [ann setTitle:[rows placeName]];
    [mapView addAnnotation:ann];

местоположение - CLLocationCoordinate2D
строки - это объектсодержащий различные местоположения и его информацию

Вот метод делегата mapView: (не уверен, почему последний "}" находится вне примера кода)

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

    if (annotation != self.mapView.userLocation) {
        annView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Plats"] autorelease];
        [annView setPinColor:MKPinAnnotationColorRed];
        annView.animatesDrop = TRUE;
        annView.canShowCallout = YES;
        return annView;
    } else {
        zoomButton.enabled = TRUE;
        return nil;
    }

}

1 Ответ

0 голосов
/ 16 июня 2011

Вам необходимо создать цикл, который будет проверять, находится ли местоположение в пределах x миль от пользователя. Вот пример того, что я имею в виду, что я использовал в своем собственном коде

for (CLLocation *prox in locations) {
    NSLog(@"prox %@", prox);
    float distanceFromLocation = [mapView.userLocation.location distanceFromLocation:prox]/1609.344;
    NSLog(@"distance %f", distanceFromLocation);
    if (distanceFromLocation <= 10) {
        NearbyLocation *nearbyLocation = [[NearbyLocation alloc]init];
        NSString *key = [NSString stringWithFormat:@"%d", index];
        nearbyLocation.title = [storedTitles objectForKey:key];
        nearbyLocation.loction = prox;
        nearbyLocation.subtitle = [NSString stringWithFormat:@"%.1f miles away", distanceFromLocation];
        nearbyLocation.lat = prox.coordinate.latitude;
        nearbyLocation.lon = prox.coordinate.longitude;
        [newArray addObject:nearbyLocation];
        [nearbyLocation release];
    }
    index++;
}
NSLog(@"new array %d prox %d", [newArray count], [proximityOutlet.nearbyLocations count]);
if ([newArray count] > [proximityOutlet.nearbyLocations count]) {
    NSLog(@"set array");
    // if the new array has actually added any objects, set the array and switch views;
    proximityOutlet.nearbyLocations = newArray;
    //[self.navigationController pushViewController:proximityOutlet animated:YES];
    proximityOutlet.modalPresentationStyle = UIModalPresentationPageSheet;
    proximityOutlet.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:proximityOutlet animated:YES];
}
[newArray release];

}

По сути, создайте цикл, который будет искать в массиве местоположений. иметь это [mapView.userLocation.location distanceFrom: prox] /1609.334 // prox, представляющий экземпляр местоположения, которое проверяется, чтобы определить, находится ли пользователь в пределах x миль.

тогда скажи

if ([mapview.userLocation.location distanceFrom:prox]/1609.334 < (however many miles)){

        annotationView = x;
}
...