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

È stato utile?

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);  
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top