2014-02-28 53 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

相关问题