2014-05-08 9 views
6

मुझे MKMapKit में 512x512px टाइल्स लोड करने में समस्याएं हैं। सर्वर 512x512 .jpeg टाइल्स प्रदान करता है।रेटिना-टाइल्स के साथ MKTileOverlay

मुझे MKMapView में कस्टम रेटिना टाइल्स के लिए कोई समाधान या नमूना कार्यान्वयन नहीं मिला।

मुझे क्या करना:

जब मैं

overlay = [[MKTileOverlay alloc] initWithURLTemplate:template]; 
overlay.tileSize = CGSizeMake(512.0f, 512.0f); 
[_mapView insertOverlay:overlay atIndex:MAP_OVERLAY_INDEX_TILE level:MKOverlayLevelAboveLabels]; 

साथ MKMapView में उन्हें लोड ... टाइल्स स्केलिंग रहे हैं सही लेकिन उनमें से आधे लोड किया जाता है (न केवल नेत्रहीन - मैं अनुरोध सूंघा और टाइल याद कर रहे हैं)

साथ

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 (आईओएस सिम्युलेटर 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

और आईओएस 8 के बारे में कैसे? कोई विचार? –

+0

नहीं। इस एपीआई ने मुझे नाराज किया। इससे पहले कि मैं इसे फिर से देखूं, मुझे इस भावना को भूलना होगा। अभी मैं आईओएस 8 में रेटिना टाइल्स प्रदर्शित नहीं कर रहा हूं। टाइल आकार और टाइल स्केल दोनों को स्पष्ट रूप से प्रदान करने का एक तरीका होना चाहिए। मैं नहीं देखता कि इसे अलग तरीके से कैसे किया जा सकता है। – FKDev

संबंधित मुद्दे