Uncenter MKMapView

votos
0

Estoy tratando de la vista del mapa uncenter y eliminar todas las anotaciones. La razón de esto es que el MAPview será utilizada por diferentes controladores de vista para mostrar diferentes anotaciones y lugares. Lo que está pasando ahora es que estoy usando el método de eliminar las anotaciones y que los elimina, pero el mapa permanece centrado en el lugar y por lo tanto, cuando las nuevas anotaciones entran, no se mueve. ¿Hay una manera de restablecer la región y si es así, ¿qué valor puedo restaurarla a. Probé nula, cero y un valor calculado, pero Core Animation dice que son todos válidos. ¿Cómo puedo obtener que para alejar y de vuelta en mis nuevas anotaciones?

Aquí hay un código

-(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];
}

Esa es la methos recenter estoy usando

- (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;
}

Esta pieza si no espera hasta que el mármol azul cae en el mapa a continuación recentra. El problema que tengo con esa parte es que cuando vuelva a la anterior Vista Controlador puedo eliminar todas las anotaciones, por lo que cuando vuelvo en la ubicación del usuario (por alguna razón) no salta de nuevo. ¿Cómo consigo esto para que aparezca ¿de nuevo en?

Gracias de antemano chicos

Publicado el 08/01/2010 a las 13:03
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Consiguió la primera parte, hizo alejar de nuevo con sólo llamar a una función que hice que establece la región hasta haber terminado los EE.UU..

-(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];

}

La segunda parte todavía me desconcierta, ¿cómo consigo que la ubicación para que aparezca de nuevo?

Respondida el 11/01/2010 a las 10:24
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more