Uncenter MkMapView - PullRequest
       14

Uncenter MkMapView

0 голосов
/ 08 января 2010

Я пытаюсь «отцентрировать» вид карты и удалить все аннотации. причина этого в том, что mapView будет использоваться разными контроллерами представления для отображения разных аннотаций и местоположений. Что происходит сейчас, так это то, что я использую метод «удалить аннотации» и удаляю их, но карта остается центрированной на месте, и поэтому, когда появляются новые аннотации, она не перемещается. Есть ли способ сбросить регион, и если да, то на какое значение я могу его сбросить. Я пробовал ноль, ноль и некоторое вычисленное значение, но «основная анимация» говорит, что все они недействительны. Как я могу получить это, чтобы уменьшить и вернуться к моим новым аннотациям?

вот код

-(void)recenterMap {

NSArray *coordinates = [_mapView valueForKeyPath:@"annotations.coordinate"];
CLLocationCoordinate2D maxCoord = {-90.0f, -180.0f};
CLLocationCoordinate2D minCoord = {90.0f, 180.0f};

//NSLog(@"%@", [coordinates description]);

for (NSValue *value in coordinates) {
    CLLocationCoordinate2D coord = {0.0f, 0.0f};
    [value getValue: &coord];

    if(coord.longitude > maxCoord.longitude) {
        maxCoord.longitude = coord.longitude;
    }

    if(coord.latitude > maxCoord.latitude){

        maxCoord.latitude = coord.latitude;
    }

    if(coord.longitude < minCoord.longitude){
        minCoord.longitude = coord.longitude;
    }

    if(coord.latitude < minCoord.latitude){
        minCoord.latitude = coord.latitude;
    }
}


MKCoordinateRegion region = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region.center.longitude = (minCoord.longitude + maxCoord.longitude) / 2.0;
region.center.latitude = (minCoord.latitude + maxCoord.latitude) / 2.0;
region.span.longitudeDelta = maxCoord.longitude - minCoord.longitude;
region.span.latitudeDelta = maxCoord.latitude - minCoord.latitude;


[_mapView setRegion: region animated: YES];
}

То, что я использую в качестве метода поиска

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

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

    Annotation *schoolAnn = (Annotation*)annotation;
    view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"schoolLoc"];
    if(nil == view){
        view = [[[MKPinAnnotationView alloc] initWithAnnotation:schoolAnn     reuseIdentifier:@"schoolLoc"]autorelease];
    }

    [(MKPinAnnotationView *)view setAnimatesDrop:YES];
    [view setCanShowCallout:YES];

}
else { 
    [self recenterMap];
}

return view;
}

Эта часть "еще" ждет, пока синий мрамор не упадет, а затем не перецентрирует карту. Проблема, которую я имею с этой частью, состоит в том, что, когда я возвращаюсь к предыдущему View Controller, я удаляю все аннотации, поэтому, когда я возвращаюсь в местоположение пользователя (по какой-то причине), не появляется снова. Как я могу получить это, чтобы выскочить обратно в?

заранее спасибо, ребята

1 Ответ

0 голосов
/ 11 января 2010

Получил первую часть, сделал ее снова уменьшенной, просто вызвав функцию, которую я сделал, которая установила регион над США.

-(void)unCenterMap{

MKCoordinateRegion region2 = {{0.0f, 0.0f}, {0.0f, 0.0f}};
region2.center.longitude = (-98.151855); //coordinate for approximately the center of the US
region2.center.latitude = 39.402244;
region2.span.longitudeDelta = 3.0;
region2.span.latitudeDelta = 3.0;


[_mapView setRegion: region2 animated: YES];

}

Вторая часть все еще сбивает меня с толку, как я могу получить это место снова?

...