當我在iOS7的mapview上疊加覆蓋圖時,如何隱藏mapview?這段代碼用於在iOS6中工作,但是當我將應用升級到iOS7時,它停止工作。mapoverlay可見時隱藏mapview ios7
NSArray *views = [[[self.mapView subviews] objectAtIndex:0] subviews];
[[views objectAtIndex:0] setHidden:YES];
任何建議或反饋?
當我在iOS7的mapview上疊加覆蓋圖時,如何隱藏mapview?這段代碼用於在iOS6中工作,但是當我將應用升級到iOS7時,它停止工作。mapoverlay可見時隱藏mapview ios7
NSArray *views = [[[self.mapView subviews] objectAtIndex:0] subviews];
[[views objectAtIndex:0] setHidden:YES];
任何建議或反饋?
用什麼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覆蓋整個世界,但是毫無戒心的用戶可能會在不知不覺中傳輸比他/她喜歡的數據更多的數據。
我不知道你爲什麼會想這樣做,但不是計算子視圖的數量,你應該只問的MapView的覆蓋人數有
if ([[mapView overlays] count] > 0)
{
....
}
MapKit是不是真的設計用於直接訪問真正覆蓋圖之外的地圖視圖子視圖(例如,關閉下面的蘋果地圖)。
兩個想法:
考慮使用新的iOS 7 MKTileOverlay
類隨着canReplaceMapContent
財產。這會關閉Apple的底層映射。
考慮一個類似但獨立的庫,例如MapBox iOS SDK,它可以模擬MapKit的外觀,但具有更大的樣式靈活性(並且還支持iOS 5)。
順便說一句我發現canReplaceMapContent有時候還會帶出Apple映射。當實現一個自定義MKTileOverlay時,會發生這種情況,該MKTileOverlay返回boundingMapRect,我不知道它是否重要,但它與世界地圖相比是一個非常小的區域。在這種情況下,未覆蓋的地圖區域仍然顯示。 – huggie
我試圖隱藏底層的地圖,如果有重疊。 –
啊,這是不同的「隱藏mapView」 – Craig
有沒有辦法做到這一點,而不使用MapBox?我需要刪除底層的地圖背景,並只顯示我的覆蓋。要麼顯示包含疊加層的地圖區域,要麼不會超過該地圖區域。 –