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

War es hilfreich?

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);  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top