You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift项目中结合自定义标注使用iOS 17的Look Around View

解决iOS 17 Look Around View不工作的问题

你的代码存在几个关键问题导致Look Around View无法正常加载,以下是针对性修复方案:

1. 后台任务更新UI需切换主队列

fetchLookAroundPreview中使用Task.detached在后台线程请求数据,但@State变量lookAroundScene必须在主队列更新才能触发UI刷新。修改方法如下:

func fetchLookAroundPreview() {
    guard let mapSelection = mapSelection else { return }
    
    lookAroundScene = nil
    Task { // 不使用detached,默认继承当前上下文,完成后自动回到主队列
        let request = MKLookAroundSceneRequest(mapItem: mapSelection)
        do {
            lookAroundScene = try await request.scene
        } catch {
            print("Look Around加载失败: \(error.localizedDescription)")
        }
    }
}

2. 完善MKMapItem的Placemark信息

仅传入坐标的MKPlacemark数据不足,Apple的Look Around服务需要更完整的地理信息才能准确匹配场景。更新fetchMyAnnotations方法:

func fetchMyAnnotations() {
    let coordinates = CLLocationCoordinate2D(latitude: 37.33489680799126, longitude: -122.03039070251354)
    // 添加完整地址属性
    let placemark = MKPlacemark(
        coordinate: coordinates,
        addressDictionary: [
            CNPostalAddressStreetKey: "1 Infinite Loop",
            CNPostalAddressCityKey: "Cupertino",
            CNPostalAddressStateKey: "CA",
            CNPostalAddressPostalCodeKey: "95014"
        ]
    )
    let mapItem = MKMapItem(placemark: placemark)
    mapItem.name = "Apple Park"

    myAnnotations.append(mapItem)
}

3. 确保权限配置完整

在Info.plist中必须添加位置权限描述,否则地图服务会受限:

  • 添加NSLocationWhenInUseUsageDescription,描述示例:"需要访问您的位置以显示地图和Look Around预览"
  • 若需始终权限,额外添加NSLocationAlwaysAndWhenInUseUsageDescription

4. 验证数据加载环境

苹果园区属于Look Around覆盖区域,但模拟器可能出现加载延迟:

  • 确保模拟器网络连接正常
  • 优先使用真实设备测试(真实设备的地理数据加载稳定性更高)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:37:40