You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SwiftUI MapKit:切换至.userLocation时设置初始pitch与distance的可靠方案

MapKit导航模式下如何设置初始Pitch和Distance(跟随用户位置与航向)

问题背景

我正在开发一款面向卡车司机的导航应用,核心需求是让地图跟随用户位置与航向,同时固定保持60°的Pitch视角——这是安全功能,能帮助司机更好地预判前方路况、及时调整车道,效果对标苹果或谷歌地图的导航模式。

当前遇到的核心问题:使用.userLocation(followsHeading:fallback:)切换到用户位置跟踪模式时,无论之前设置过什么视角,都会强制重置Pitch为0°的平面视角,且该API没有提供设置Pitch或Distance的参数。

我期望的理想API形式(已向苹果提交反馈):

camera = .userLocation(
    followsHeading: true,
    distance: 800,
    pitch: 60,
    fallback: .automatic
)

临时解决方案(不稳定)

目前采用的是间接方案:先手动配置好目标Pitch和Distance的相机参数,等待动画完成后再切换到用户跟踪模式,依赖该模式会继承切换时刻的Pitch和Distance参数:

camera = .camera(MapCamera(
    centerCoordinate: location.coordinate,
    distance: 800,
    heading: location.course < 0 ? 0 : location.course,
    pitch: 60
))

Task {
    try? await Task.sleep(for: .seconds(5))
    camera = .userLocation(followsHeading: true, fallback: .automatic)
}

但固定5秒延迟极不可靠,动画完成时间受设备性能影响,经常会出现参数继承失败的情况。

寻求解决方案

是否存在可靠、非临时的方案,能在编程切换至.userLocation跟踪模式时直接设置初始Pitch和Distance?还是这属于当前MapKit的功能限制,暂无优雅的解决办法?

内容的提问来源于stack exchange,提问作者Ozy

火山引擎 最新活动