iOS MapKit followWithHeading不使地图旋转



我正计划构建一个使用MapKit和核心位置的应用程序。首先,我只是想创建一个基本的地图视图,显示用户的位置,并旋转地图以匹配设备所面对的方向,就像标准的地图应用程序在点击当前位置按钮两次时所做的那样。

我遵循了一些基本指南,使用UIViewRepresentable在Swift UI应用程序中显示MKMapView,到目前为止,我已经生成了以下代码:

BasicMapViewUI。Swift:

import SwiftUI
import MapKit
struct BasicMapViewUI: UIViewRepresentable
{
func makeUIView(context: Context) -> MKMapView
{
let myMapView = MKMapView()
myMapView.showsUserLocation = true
myMapView.userTrackingMode = .followWithHeading
myMapView.showsCompass = true
return myMapView
}

func updateUIView(_ uiView: MKMapView, context: Context)
{
print("updateUIView Called")
}

typealias UIViewType = MKMapView
}

基本位置管理器。Swift

import Foundation
import CoreLocation
class BasicLocationManager: NSObject, ObservableObject
{
var locationManager = CLLocationManager()

func startLocationServices()
{
locationManager.startUpdatingLocation()
locationManager.startUpdatingHeading()
}

override init()
{
super.init()
locationManager.delegate = self
}
}
extension BasicLocationManager: CLLocationManagerDelegate
{
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
guard let latest = locations.first else { return }
let heading = latest.course
print(latest)
}

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
{
let latest = newHeading
print(latest)
}
}

基本地图视图。Swift:

import SwiftUI
struct BasicMapView: View
{
@StateObject var myLocationManager = BasicLocationManager()
var body: some View
{
ZStack
{
BasicMapViewUI()
.edgesIgnoringSafeArea(.all)
}.onAppear {
print("onAppear")
myLocationManager.startLocationServices()
}
}
}

(我知道我不应该在这里调用startLocationServices,但这似乎是这个沙箱类型示例的最简单方法(

我的主应用程序文件只调用BasicMapView((

当我在设备上运行该应用程序时,地图会显示,并且点在正确的位置,但地图不会随着设备的方向旋转。

文件表明myMapView.userTrackingMode = .followWithHeading应使地图在航向改变时自动旋转。

我可以从位置管理器委托中的didUpdateHeading函数中判断出标题正在正确更新。

如果有人能帮我理解这一点,我将不胜感激。

我使用的是情节串连板,而不是SwiftUI,但我的解决方案是让我的MapViewController(一个包含MKMapView的基本UIViewController(作为MKMapView中的MKMapViewDelegate委托,在mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation)委托方法中,在第一次调用该方法时设置mapView.userTrackingMode = .followWithHeading

相关内容

  • 没有找到相关文章

最新更新