我正在尝试使用MKOverlayView将png图像添加为自定义地图。我差不多了 - 我能够在正确的位置排列图像,我知道MKOverlayView的子类中的-drawMapRect:方法是定期调用的;我似乎无法让图像正确渲染。它完全模糊,几乎无法辨认。我也知道图像足够大(它是1936×2967)。这是我的-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);
有没有人知道发生了什么?
谢谢! -Matt
答案 0 :(得分:4)
我遇到了类似的问题。问题是我的boundingMapRect定义不正确。当图块上的比例较小时,将缩小整个图像。然后缩放地图,并且并非所有图像切片都位于boundingMapRect切片中,因此不会以正确的比例重新绘制它们,并缩小缩小的版本。至少这就是我的想法。
希望这有帮助。
答案 1 :(得分:2)
摆脱CGContextScaleCTM(context,1.0,-1.0);并在预览中对图像进行垂直翻转。 mapkit似乎使用上下文信息来确定要更清晰地呈现图像的哪个部分。知道它已经有一段时间了,但希望它有所帮助!
答案 2 :(得分:0)
谢谢罗布,你做了我的一天。当我替换
时,我的模糊叠加图像变得尖锐CGContextScaleCTM(context, 1.0, -1.0);
与
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, theRect.size.height);
CGContextConcatCTM(context, flipVertical);