将当前位置图标设置在MKMapView的下方

3
我想要在地图下方展示我的当前位置(iOS 6和iOS 7),如下所示的屏幕截图,以便用户可以看到更远的视图 [谷歌默认应用程序与谷歌地图]。

enter image description here

现在,作为下面这张图片中显示视图中心的光标 [我的应用程序使用苹果地图]。 enter image description here 因此,大部分屏幕用于显示背景内容,而无法向前查看很远。
在第一张和第二张图像中,我与Google导航进行了比较,后者在屏幕下方显示了当前位置,旋转角度大致相同。 我添加了一些箭头来说明我正在讨论什么。
我尝试了以下代码以设置中心,因为我找不到设置底部的选项。

mapView.userTrackingMode = MKUserTrackingModeFollow;

我还尝试了以下方法

[mapView setCenterCoordinate:currentLocation.coordinate animated:YES];

3个回答

4

MKMapView上设置layoutMargins完全有效。

根据文档指出:

设置视图中布局内容时要使用的默认间距。

在iOS 11及更高版本中,请使用directionalLayoutMargins属性来指定布局边距,而不是使用此属性。

若要将相机的居中点偏移以使其位于MKMapView的底部一半,请将UIEdgeInsets.top设置为MKMapView高度的一半。

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
不要设置 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];

尝试在模拟器中使用“城市自行车骑行”、“城市跑步”或“高速公路驾驶”进行测试。
您可能需要调整一些数字以获得所需的视角。

它在iOS 7上运行正常,但我该如何在iOS 6上处理? - jayraj m.g.
iOS 6没有内置3D支持。您需要创建一个自定义解决方案(或尝试使用Google Maps SDK for iOS以及它的GMSCameraPosition,尽管我不知道它是否支持iOS 6)。 - user467105

0
一个简单的解决方法是将MKMapView的框架大小调整为大于设备屏幕的尺寸。例如:
MapViewHeight = (WindowHeight - desiredOffsetFromBottom)*2

这不是通用解决方案,因为它将改变缩放计算的方式。 - Buddhisthead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接