MKOverlay View è offuscata
-
29-09-2019 - |
Domanda
Sto cercando di aggiungere un'immagine PNG come mappa personalizzata utilizzando MKOverlayView. Ci sono quasi - sono in grado di ottenere l'immagine in fila nel posto giusto, e so che il -drawMapRect: metodo nella sottoclasse di MKOverlayView viene chiamato periodicamente; Io proprio non riesco a ottenere l'immagine di rendere correttamente. E 'totalmente sfocata, quasi irriconoscibile. So anche che l'immagine è abbastanza grande (è 1936 × 2967). Ecco il mio codice per -drawMapRect:
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context{
// Load image from applicaiton bundle
NSString* imageFileName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"map.jpg"];
CGDataProviderRef provider = CGDataProviderCreateWithFilename([imageFileName UTF8String]);
CGImageRef image = CGImageCreateWithJPEGDataProvider(provider, NULL, true, kCGRenderingIntentDefault);
CGDataProviderRelease(provider);
// save context before screwing with it
CGContextSaveGState(context);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetAlpha(context, 1.0);
// get the overlay bounds
MKMapRect theMapRect = [self.overlay boundingMapRect];
CGRect theRect = [self rectForMapRect:theMapRect];
// Draw image
CGContextDrawImage(context, theRect, image);
CGImageRelease(image);
CGContextRestoreGState(context);
Qualcuno ha idea di cosa sta succedendo?
Grazie! -Matt
Soluzione
Ho avuto un problema simile. Il problema era che il mio boundingMapRect è stato definito in modo non corretto. L'immagine completa viene resa ridimensionato quando la scala è piccola su una tessera. Poi la mappa è ingrandita e non tutte le tessere di immagine sono nel boundingMapRect piastrelle quindi non sono ridisegnati nella scala corretta e la ridimensionato versione è ingrandita. Almeno questo è quello che penso succede.
Spero che questo aiuti.
Altri suggerimenti
Sbarazzarsi di CGContextScaleCTM (contesto, 1.0, -1.0); e fare un flip verticale sulla vostra immagine in anteprima, invece. la MapKit sembra utilizzare le informazioni di contesto per determinare quale parte dell'immagine per rendere più chiaro. So che è stato un po ', ma spero che aiuta!
Grazie Rob, è fatto il mio giorno. La mia immagine di sovrapposizione mosso ottenuto affinare quando ho sostituito
CGContextScaleCTM(context, 1.0, -1.0);
con
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, theRect.size.height);
CGContextConcatCTM(context, flipVertical);