2013-10-27 65 views
1

當我在iOS7的mapview上疊加覆蓋圖時,如何隱藏mapview?這段代碼用於在iOS6中工作,但是當我將應用升級到iOS7時,它停止工作。mapoverlay可見時隱藏mapview ios7

NSArray *views = [[[self.mapView subviews] objectAtIndex:0] subviews]; 

[[views objectAtIndex:0] setHidden:YES]; 

任何建議或反饋?

回答

2

用什麼incanus與MKTileOverlay說,正是這樣的視圖控制器:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSString *tileTemplate = @"http://tile.stamen.com/watercolor/{z}/{x}/{y}.jpg"; 
    MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:tileTemplate]; 
    overlay.canReplaceMapContent = YES; 
    [self.mapView addOverlay:overlay]; 

    [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(37.54827, -121.98857)]; 
    self.mapView.delegate = self; 
} 


-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 
{ 
    MKTileOverlayRenderer *renderer = [[MKTileOverlayRenderer alloc] initWithOverlay:overlay]; 
    return renderer; 
} 

如果您需要在覆蓋如何反饋數據控制,你需要繼承MKTileOverlay並覆蓋loadTileAtPath:result:

-(void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *, NSError *))result 
{ 
    NSData *tile = [self someHowGetTileImageIntoNSDataBaseOnPath:path]; 
    if (tile) { 
     result(tile, nil); 
    } else { 
     result(nil, [NSError errorWithDomain: CUSTOM_ERROR_DOMAIN code: 1 userInfo:nil]); 
    } 
} 

MKOverlay協議需要boundingMapRect:,這應該漚爲此覆蓋圖覆蓋的矩形區域甕器MKMapRect。然而,我個人發現,如果我自己重寫它,它會取消之前的canReplaceMapContent = YES設置,因爲Apple可能不喜歡顯示空白的灰色地圖。所以我只是讓MKTileMapOverlay來處理它。

如果您的疊加層不是真正的瓷磚,那麼MKTileOverlay並不適用。但我認爲你可能會僞造它,但始終在loadTileAtPath:result:內報告無數據,並通過另一個覆蓋圖添加真實覆蓋圖。另一種選擇是用black polygon overlay覆蓋整個世界,但是毫無戒心的用戶可能會在不知不覺中傳輸比他/她喜歡的數據更多的數據。

0

我不知道你爲什麼會想這樣做,但不是計算子視圖的數量,你應該只問的MapView的覆蓋人數有

if ([[mapView overlays] count] > 0) 
{ 
    .... 
} 
+0

我試圖隱藏底層的地圖,如果有重疊。 –

+0

啊,這是不同的「隱藏mapView」 – Craig

+0

有沒有辦法做到這一點,而不使用MapBox?我需要刪除底層的地圖背景,並只顯示我的覆蓋。要麼顯示包含疊加層的地圖區域,要麼不會超過該地圖區域。 –

1

MapKit是不是真的設計用於直接訪問真正覆蓋圖之外的地圖視圖子視圖(例如,關閉下面的蘋果地圖)。

兩個想法:

  1. 考慮使用新的iOS 7 MKTileOverlay類隨着canReplaceMapContent財產。這會關閉Apple的底層映射。

  2. 考慮一個類似但獨立的庫,例如MapBox iOS SDK,它可以模擬MapKit的外觀,但具有更大的樣式靈活性(並且還支持iOS 5)。

+0

順便說一句我發現canReplaceMapContent有時候還會帶出Apple映射。當實現一個自定義MKTileOverlay時,會發生這種情況,該MKTileOverlay返回boundingMapRect,我不知道它是否重要,但它與世界地圖相比是一個非常小的區域。在這種情況下,未覆蓋的地圖區域仍然顯示。 – huggie