Ho un MKMapView
che sta avendo un problema molto strano che è un po 'difficile da spiegare. Ho un MKOverlay
che viene salvato tra le sessioni salvando i punti della sovrapposizione su un file e caricando la sovrapposizione in viewDidLoad
. Quindi, ecco il problema:MKOverlay sovrascrive tutto con circostanze strane solo su ios5?
Passi
- aggiungo un
MKOverlay
alMKMapView
- Al secondo o terzo periodo dopo l'aggiunta del
MKOverlay
per il tutto mappa sulla mappa viene sovrapposto da una sovrapposizione di lo stesso colore come quello che ho aggiunto. Tutto sulla mappa con l'eccezione della vista della mappa che è possibile visualizzare quando la vista è stata caricata.
Altre cose strane:
- Questo problema si verifica solo quando
mapView.showsUserLocation
è impostato su vero - Questo problema si verifica solo su
iOS5
. Tutto funziona perfettamente suiOS6
. - Se si rimpicciolisce la sovrapposizione colorata, ridimensiona la porzione visibile di della mappa per riempire la mappa al nuovo livello a cui è stato eseguito lo zoom indietro.
Questo ragazzo ha lo stesso problema, anche se la sua soluzione non ha funzionato per me.
Trouble with overlay using MKPolyline & MKPolylineView
Ecco alcuni del mio codice:
-(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;
}
codice chiamato quando i carichi vista, mi hanno annotato le coordinate che vengono aggiunti alla matrice polilinea destra prima di essere aggiunti, e tutto va bene e dandy!
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];
ecco una foto di ciò che accade quando viene visualizzata la sovrapposizione e l'utente pentole a lato sulla mappa: qualche idea su qual è il problema?
Il problema si verifica ancora ... – Shredder2794
Hm, quando si creano la mappa e le linee? Poiché hai detto che accade solo quando la posizione dell'utente è attiva, prova a creare la mappa e le polilinee durante viewWillAppear della vista contenitore della mappa, quindi imposta showSserLocation della mappa su YES durante viewDidAppear. – poetmountain
Questo funziona! Grazie mille! Dovresti modificare la tua risposta per adattarla alla risposta che mi hai dato in questi commenti per le persone future con questo problema! – Shredder2794