2016-08-02 44 views
0

我有MKMapView從底部被另一個視圖覆蓋。比方說,地圖的高度是250,但從最底層看,其他視圖覆蓋了100。中心MKMapView當地圖的一部分被覆蓋

現在,如果我使用setRegion將地圖居中,則它將地圖居中,就好像整個地圖是可見的一樣,但我需要將它居中放置在真正可見的區域中,即其餘的高度爲150。

你可以說,然後降低地圖的高度爲150,所以它不會被覆蓋,但我需要它覆蓋的設計,因爲覆蓋視圖沒有完全寬度的邊界(有差距側面),因此地圖在覆蓋視圖周圍可見。

那麼,如何將地圖居中放置在真實可見區域的高度?

現在我用這:

CLLocationCoordinate2D loc = CLLocationCoordinate2DMake(lat, long); 
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (loc, 200, 200); 
[_map setRegion:region animated:YES]; 
+0

爲什麼不使用此代碼'[_map setCenterCoordinate:loc animated:YES]'? –

+0

我會嘗試一下,但有些東西告訴我這並不能解決問題。但會嘗試一下,thx。 – luky

+0

你試過了嗎? @luky –

回答

1

嘗試使用:

[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect] 
        animated:YES]; 

或者,如果你想調整畫面中,還抵消了一點,你可以用:

[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect] 
        edgePadding:UIEdgeInsetsMake(50, 50, 50, 50) 
        animated:YES]; 
+0

你好。這符合預期的效果[_map setVisibleMapRect:[_map visibleMapRect] edgePadding:UIEdgeInsetsMake(0,0,heightOfMapCover,0)animated:YES];唯一的問題是,底部內嵌填充的不同值似乎強制使用不同的地圖縮放。像100是一個縮放,120個其他縮放等。這很奇怪的表現。否則,它確實會將地圖按照指定的數字移動,這正是我所需要的。謝謝 – luky

+0

@luky,這個問題聽起來很奇怪。我認爲縮放由'MKMapRect'控制,而不是'UIEdgeInsets'。你可以看看我原來的帖子:http://stackoverflow.com/a/35614774/5165668。目前我不確定這是你的bug還是蘋果的bug。 – OlDor

0

不知道你是否曾想過這個,但這裏是一個快速解決方案。應該很容易的對象 -

let pointYouWantCentered = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
pointYouWantCentered.latitude -= (mapView.region.span.latitudeDelta * 0.25) 
mapView.setCenter(pointYouWantCentered, animated: true) 

這適應將圍繞該點在屏幕的上半部分。只要您知道底部視圖佔用的屏幕部分,您就可以將地圖中心調整爲您想要的點。例如,假設你有一個視角佔據了下半部分,那麼這個點位於屏幕上半部分。如果您的底部視圖佔據了底部的1/3,並且您希望以視圖的頂部2/3爲中心,則可以執行以下操作。

let pointYouWantCentered = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
pointYouWantCentered.latitude -= (mapView.region.span.latitudeDelta * (1.0/6.0)) 
mapView.setCenter(pointYouWantCentered, animated: true) 

希望這會有所幫助。