我想在地图中显示当前位置较低(iOS 6和iOS 7),如下面的屏幕截图用户可以看到更多视图[google默认应用程序与谷歌地图]。
现在,在视图中显示中心的光标如下图所示[我的app with apple map]。
因此,屏幕的最大部分用于显示背后的内容,但它无法向前看。
在第一张图片和第二张图片中,我将与Google导航进行比较,后者显示屏幕中当前位置低得多,旋转角度大致相同。我添加了一些箭头来显示我在说什么。
我尝试下面的设置中心代码,因为我找不到设置更低。
mapView.userTrackingMode = MKUserTrackingModeFollow;
并尝试以下方法
[mapView setCenterCoordinate:currentLocation.coordinate animated:YES];
答案 0 :(得分:2)
请勿设置userTrackingMode
或地图的centerCoordinate
。
相反,您可以尝试将MKMapCamera
指向坐标稍微超前于用户的坐标。这将自动将用户的位置放在屏幕下方。
计算坐标“前方短距离”目前尚未内置到iOS SDK中,因此您必须手动计算它。
一种方法是使用以下方法: Calculate new coordinate x meters and y degree away from one coordinate
使用该答案中的coordinateFromCoord:atDistanceKm:atBearingDegrees:
方法,您可以像这样设置相机:
MKMapCamera *cam = [MKMapCamera camera];
CLLocationCoordinate2D coordinateAhead =
[self coordinateFromCoord:currentLocation.coordinate
atDistanceKm:0.15
atBearingDegrees:currentLocation.course];
//adjust distance (0.15 km) as needed
cam.centerCoordinate = coordinateAhead;
cam.heading = currentLocation.course;
cam.pitch = 80; //adjust pitch as needed (0=look straight down)
cam.altitude = 100; //adjust as needed (meters)
[mapView setCamera:cam animated:YES];
在模拟器中使用“City Bicycle Ride”,“City Run”或“Freeway Drive”进行尝试。
您可能需要调整一些数字以获得所需的视角。
答案 1 :(得分:2)
在layoutMargins
上设置MKMapView
很好。
根据文档
在视图中布局内容时要使用的默认间距。
在iOS 11及更高版本中,请使用directionalLayoutMargins属性 指定布局边距而不是此属性。
要将摄影机的中心点偏移到MKMapView
的下半部分,只需将UIEdgeInsets.top
设置为MKMapView's
高度的一半即可。
class MapViewController: UIViewController {
@IBOutlet var mapView: MKMapView!
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let layoutMargins = UIEdgeInsets(top: self.mapView.bounds.size.height / 2, left: 0, bottom: 0, right: 0)
self.mapView.layoutMargins = layoutMargins
}
答案 2 :(得分:0)
一个简单的解决方法应该是使MKMapView框架大于设备的屏幕。 类似的东西:
MapViewHeight = (WindowHeight - desiredOffsetFromBottom)*2