MKOverlay superpone todo con circunstancias extrañas solo en ios5?

Tengo un MKMapView que está teniendo un problema muy extraño que es difícil de explicar. Tengo una MKOverlay que se guarda entre sesiones guardando los puntos de la superposition en un file y cargando la superposition en viewDidLoad . Entonces, aquí está el problema:

Pasos

  1. Agrego un MKOverlay al MKMapView
  2. En la segunda o tercera ejecución después de agregar MKOverlay al map, todo en el map se superpone con una superposition del mismo color que la que agregué. Todo en el map con la exception de la vista del map que puede ver cuando se carga la vista.

Otras cosas extrañas:

  1. Este problema solo se produce cuando mapView.showsUserLocation se establece en true
  2. Este problema solo ocurre en iOS5 . Todo funciona bien en iOS6 .
  3. Si networkinguce el tamaño de la superposition de color, la parte visible del map para completar el map en el nuevo nivel al que se acercó.

Este tipo está teniendo el mismo problema, aunque su solución no funcionó para mí.

Problemas con la superposition utilizando MKPolyline y MKPolylineView

Aquí hay algunos de mis códigos:

 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { MKPinAnnotationView *pinView = nil; //switch this to MKAnnotationView and use .image property if pins need to be images if(annotation == self.startingPin || annotation == self.endingPin){ static NSString *defaultPinID = @"com.MagnusDevelopment.pin"; pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; if (pinView == nil)pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultPinID]; pinView.canShowCallout = YES; pinView.animatesDrop = TRUE; if(annotation == self.startingPin){ //starting pin pinView.pinColor = MKPinAnnotationColorGreen; }else{ //ending pin pinView.pinColor = MKPinAnnotationColorRed; } } return pinView; } - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay { MKPolylineView *aView = [[MKPolylineView alloc] initWithPolyline:(MKPolyline *)overlay]; aView.lineWidth = 7.0; aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.6]; return aView; } 

El código se llama cuando la vista se carga, he registrado las coorderadas que se agregan a la matriz de polilíneas justo antes de que se agreguen, ¡y todo está bien y genial!

  NSInteger numberOfSteps = pointsArray.count; NSLog(@"number of steps: %i",numberOfSteps); CLLocationCoordinate2D coordinates[numberOfSteps]; for (NSInteger index = 0; index < numberOfSteps; index++) { CLLocation *location = [pointsArray objectAtIndex:index]; CLLocationCoordinate2D coordinate = location.coordinate; coordinates[index] = coordinate; } MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps]; [self.mainMap addOverlay:polyLine]; 

Aquí hay una image de lo que sucede cuando aparece la superposition y el usuario se inclina hacia un lado en el map: introduzca la descripción de la imagen aquí ¿Alguna idea sobre cuál es el problema?

Estás utilizando dequeueReusableAnnotationViewWithIdentifier, pero solo estás asignando una anotación a pinView si el resultado de dequeueReusableAnnotationViewWithIdentifier fue nulo.

Como ese método a menudo devolverá una instancia existente de MKPinAnnotationView, esto debería ser:

 MKPinAnnotationView *pin = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; if (pin == nil) { pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID]; } else { pin.annotation = annotation; } 

Este podría ser el problema: cuando la vista de map intenta acceder a la vista para la location actual del usuario, está pasando su vista personalizada.

Intente agregar esto con su implementación existente.

 - (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation { if ([annotation isKindOfClass:[MKUserLocation class]]) { return nil; } return yourView; } 

PD: Esto puede no ser un problema de vista de superposition.

Atentamente.