【问题标题】:set current location icon lower side in MKMapView在 MKMapView 中设置当前位置图标下侧
【发布时间】:2014-08-21 22:41:19
【问题描述】:

我想按照下面的屏幕截图在地图(iOS 6 和 iOS 7)的下方显示我的当前位置,以便用户可以看到进一步的视图 [带有谷歌地图的谷歌默认应用程序]。

现在,光标显示在视图中心,如下图所示 [my app with apple map] 。

因此屏幕的最大部分用于显示后面的内容,而不能向前看很远。

在第一张图片和第二张图片中,我与 Google Navigation 进行了比较,它显示的当前位置在屏幕上要低得多,旋转角度大致相同。我添加了一些箭头来显示我在说什么。

我尝试了以下设置中心的代码,因为我找不到设置较低的位置。

mapView.userTrackingMode = MKUserTrackingModeFollow;

也可以试试下面的方法

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

【问题讨论】:

    标签: ios ios7 mkmapview ios6-maps


    【解决方案1】:

    MKMapView 上设置layoutMargins 效果很好。

    根据文档,

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

    在 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】:

      不要设置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”。
      您可能需要调整一些数字以获得您想要的视角。

      【讨论】:

      • 它在 iOS 7 中运行良好,但我可以为 iOS 6 做什么
      • iOS 6 没有内置 3D 支持。您必须创建一个自定义解决方案(或者尝试使用 Google Maps SDK for iOS 及其 GMSCameraPosition 虽然我不知道它是否支持 iOS 6)。
      【解决方案3】:

      一个可行的简单解决方法是使 MKMapView 框架大于设备的屏幕。 比如:

      MapViewHeight = (WindowHeight - desiredOffsetFromBottom)*2
      

      【讨论】:

      • 这不是一个通用的解决方案,因为它会改变缩放的计算方式。
      猜你喜欢
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2014-10-16
      相关资源
      最近更新 更多