2014-02-28 108 views
2

我在覆蓋整個設備屏幕空間的視圖中繪製地圖。是否可以定位地圖視圖,以便用戶的當前位置不在視圖的中心?

在這個視圖的頂部是佔據屏幕下半部分的另一個視圖。頂視圖是半透明的,因此用戶可以看到它下面的覆蓋地圖。

在地圖內我顯示用戶的當前位置。

地圖視圖被自動定位在地圖,使得用戶的位置的視圖內居中 - 因此其是裝置屏幕的中心,然而中心還包括的頂視圖。

但是我希望用戶的位置在頂視圖未覆蓋的地圖視圖部分中居中。

+0

我敢肯定,有可能是一個MKMapViewKit解決方案......但如果你不能找到一個你可以永遠只是把地圖視圖一個名爲viewHolder然後就翻譯viewHolder了一切的一半的高度的UIView內另一種觀點是。確保viewHolder沒有啓用剪輯。 (使您的mkMapView框架更大以及佔譯文) –

回答

7

最簡單的解決方案是應用偏移到座標來移動地圖一點點,取MKMapView的區域的跨度的優點。

CLLocationCoordinate2D newCenter = userCoordinate; 
newCenter.latitude -= _mapView.region.span.latitudeDelta * 0.50; 
[self.mapView setCenterCoordinate:newCenter animated:YES]; 

0.50價值是存在的只是給你一個例子。通過改變它你可以調整偏移量。

您還可以利用當前的中心位置,將其轉​​換爲CGPoint,然後以像素爲單位添加所需的偏移量爲CGPoint並將其轉換回CLLocationCoordinate2D

UIOffset offset = UIOffsetMake(30.0f, 40.0f); 
     offset.horizontal 
     offset.vertical 

CGPoint point = [_mapView convertCoordinate:userCoordinate 
           toPointToView:_mapView]; 
point.x += offset.horizontal; 
point.y += offset.vertical; 

CLLocationCoordinate2D newCenter = [_mapView convertPoint:point    
            toCoordinateFromView:_mapView]; 
[_mapView setCenterCoordinate:newCenter animated:YES]; 

希望它能幫助。

+0

謝謝,我可以得到想要的效果。但我似乎無法與設置縮放級別結合使用。是否有可能將這與setRegion結合:?在先前調用setRegion之後調用代碼段會導致我放棄的「放大」,而不是顯示幾條街道的地圖,而是顯示整個國家的地圖。但是,如果我將調用setRegion移動到代碼片段之後,那麼它將再次在視圖中居中。 – Gruntcakes

+0

我用一個替代答案更新了我的答案。請看一看。 – RaffAl

相關問題