MKOverlay Blick ist verschwommen
-
29-09-2019 - |
Frage
Ich versuche, ein PNG-Bild als benutzerdefinierte Karte hinzufügen MKOverlayView verwenden. Ich bin fast da - ich bin in der Lage, das Bild zu bekommen an der richtigen Stelle aufgereiht, und ich weiß, dass die -drawMapRect: Methode in der Unterklasse von MKOverlayView periodisch aufgerufen wird; Ich kann einfach nicht scheinen, um das Bild zu bekommen richtig zu machen. Es ist völlig verschwommen, fast bis zur Unkenntlichkeit. Ich weiß auch, das Bild ist groß genug (es 1936 ist × 2967). Hier ist mein Code für -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);
Hat jemand eine Ahnung, was los ist?
Danke! -Matt
Lösung
Ich habe ein ähnliches Problem hat. Das Problem war, dass mein boundingMapRect wurde falsch definiert. Das Vollbild gemacht wird verkleinert, wenn die Waage auf einer Fliese klein ist. Dann wird die Karte gezoomt und nicht alle Bildkacheln sind in der boundingMapRect Fliesen, so dass sie nicht in der richtigen Maßstab neu gezeichnet werden und die abgespeckte Version gezoomt wird. Zumindest das ist, was ich denke passiert.
Hope, das hilft.
Andere Tipps
Lassen Sie sich von CGContextScaleCTM befreien (Kontext, 1,0, -1,0); und tut eine vertikale Flip auf Ihrem Bild statt in der Vorschau. die MapKit scheint die Kontextinformationen zu verwenden, welcher Teil des Bildes bestimmen deutlicher zu machen. Weiß, es ist schon eine Weile her, aber ich hoffe, es hilft!
Danke Rob, du hast meinen Tag. Meine Unschärfe Overlay-Bild wurde schärfen, wenn ich ersetzt
CGContextScaleCTM(context, 1.0, -1.0);
mit
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, theRect.size.height);
CGContextConcatCTM(context, flipVertical);