2014-05-08 135 views
6

我有問題要在MKMapKit中加載512x512px瓷磚。 服務器提供512x512 .jpeg磁貼。MKTileOverlay與視網膜瓷磚

我找不到在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(iPhone模擬器7.1視網膜)

有什麼建議嗎?

最好的問候,史蒂夫

+0

你已經找到了一個解決這個問題? – Hyndrix

回答

1

下面的代碼僅適用於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; 
} 
+0

iOS 8如何?有任何想法嗎? –

+0

沒有。這個API讓我惱火。在我再次看到它之前,我必須忘記這種感覺。現在我不在iOS 8中顯示視網膜瓦片。應該有一種方法可以明確提供瓦片大小和瓦片比例。我不明白它是如何做不同的。 – FKDev