我在覆盖整个设备屏幕空间的视图中绘制地图。是否可以定位地图视图,以便用户的当前位置不在视图的中心?
在这个视图的顶部是占据屏幕下半部分的另一个视图。顶视图是半透明的,因此用户可以看到它下面的覆盖地图。
在地图内我显示用户的当前位置。
地图视图被自动定位在地图,使得用户的位置的视图内居中 - 因此其是装置屏幕的中心,然而中心还包括的顶视图。
但是我希望用户的位置在顶视图未覆盖的地图视图部分中居中。
我在覆盖整个设备屏幕空间的视图中绘制地图。是否可以定位地图视图,以便用户的当前位置不在视图的中心?
在这个视图的顶部是占据屏幕下半部分的另一个视图。顶视图是半透明的,因此用户可以看到它下面的覆盖地图。
在地图内我显示用户的当前位置。
地图视图被自动定位在地图,使得用户的位置的视图内居中 - 因此其是装置屏幕的中心,然而中心还包括的顶视图。
但是我希望用户的位置在顶视图未覆盖的地图视图部分中居中。
最简单的解决方案是应用偏移到坐标来移动地图一点点,取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];
希望它能帮助。
谢谢,我可以得到想要的效果。但我似乎无法与设置缩放级别结合使用。是否有可能将这与setRegion结合:?在先前调用setRegion之后调用代码段会导致我放弃的“放大”,而不是显示几条街道的地图,而是显示整个国家的地图。但是,如果我将调用setRegion移动到代码片段之后,那么它将再次在视图中居中。 – Gruntcakes
我用一个替代答案更新了我的答案。请看一看。 – RaffAl
我敢肯定,有可能是一个MKMapViewKit解决方案......但如果你不能找到一个你可以永远只是把地图视图一个名为viewHolder然后就翻译viewHolder了一切的一半的高度的UIView内另一种观点是。确保viewHolder没有启用剪辑。 (使您的mkMapView框架更大以及占译文) –