我有问题要在MKMapKit中加载512x512px块。服务器提供512x512 .jpeg块。
我找不到任何解决方案或样本实现的定制视网膜瓷砖在MKMapView。
我所做的:
当我将它们加载到MKMapView中时
overlay = [[MKTileOverlay alloc] initWithURLTemplate:template];
overlay.tileSize = CGSizeMake(512.0f, 512.0f);
[_mapView insertOverlay:overlay atIndex:MAP_OVERLAY_INDEX_TILE level:MKOverlayLevelAboveLabels];…瓷砖的缩放是正确的,但其中只有一半是加载的(不仅仅是视觉上的-我嗅探了请求和瓷砖丢失了)
使用
overlay = [[MKTileOverlay alloc] initWithURLTemplate:template];
overlay.tileSize = CGSizeMake(256.0f, 256.0f);
[_mapView insertOverlay:overlay atIndex:MAP_OVERLAY_INDEX_TILE level:MKOverlayLevelAboveLabels];…显示所有的瓷砖,但缩放不正确。
这是我的绘画方法:
(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay
{
MKOverlayRenderer *overlayRenderer = nil;
if([overlay isKindOfClass:MKTileOverlay.class])
{
overlayRenderer = [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
}
return overlayRenderer;
}…overlayRenderer.contentScaleFactor总是1…无论tileSize (iOS模拟器7.1视网膜)
有什么建议吗?
向你问好,史蒂夫
发布于 2014-09-18 19:06:34
以下代码仅适用于iOS 7(不适用于iOS 8)。覆盖MKTileOverlayRenderer。瓷砖大小设置为256。
@implementation FKDTileOverlayRenderer
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
CGFloat scale = [[UIScreen mainScreen] scale];
if (scale > 1.0)
{
CGSize tileSize = ((MKTileOverlay*)self.overlay).tileSize;
CGRect rect = [self rectForMapRect:mapRect];
CGContextSaveGState(context);
CGAffineTransform t = CGContextGetCTM(context);
CGContextConcatCTM(context, CGAffineTransformInvert(t));
double ratio = tileSize.width/(rect.size.width*2);
CGContextTranslateCTM(context, (double)(-rect.origin.x)*ratio, tileSize.height+ratio*(double)rect.origin.y);
CGContextScaleCTM(context, ratio, -ratio);
[super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
CGContextRestoreGState(context);
}
else
[super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
}
@end在地图视图控制器中:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKTileOverlay class]])
{
return [[FKDTileOverlayRenderer alloc] initWithTileOverlay:overlay];
}
return nil;
}https://stackoverflow.com/questions/23545197
复制相似问题