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

如何在SwiftUI应用中嵌入苹果Capturing Body Motion in 3D官方demo

崩溃原因

你遇到的崩溃是因为HumanViewController第42行的arView为nil,这个arView是@IBOutlet修饰的隐式解包可选值,从Storyboard加载ViewController时没有正确绑定Outlet,常见诱因有两个:

  • Main.storyboard中id为Main1的ViewController,类没有设置为HumanViewController
  • 该ViewController上的ARView没有和代码中的@IBOutlet var arView: ARView!做连线绑定

修复方案

方案1:修复Storyboard绑定(适合保留Storyboard的场景)

  1. 打开项目中的Main.storyboard,选中id为Main1的ViewController,在右侧身份检查器中将Class属性设置为HumanViewController
  2. 选中该ViewController上的ARView控件,打开连接检查器,将New Referencing Outlet拖到左侧的HumanViewController节点上,弹出选项时选择arView

方案2:舍弃Storyboard(更适合纯SwiftUI项目,避免绑定错误)

直接手动初始化ARView,不需要依赖Storyboard的Outlet绑定,修改代码如下:

第一步:修改HumanViewController代码

public class HumanViewController: UIViewController, ARSessionDelegate {
    // 删掉原来的@IBOutlet声明,改成手动初始化
    var arView: ARView!
    
    public override func loadView() {
        // 手动创建ARView作为当前控制器的根视图
        arView = ARView(frame: UIScreen.main.bounds)
        arView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        self.view = arView
    }

    // 剩下的viewDidAppear、session代理方法和原有代码保持一致即可
    // ... 原有代码省略
}

第二步:修改封装器代码,不需要从Storyboard加载控制器

struct HumanViewControllerControllerWrapper: UIViewControllerRepresentable {
    typealias UIViewControllerType = HumanViewController

    func makeUIViewController(context: Context) -> HumanViewController {
        // 直接初始化控制器,不需要读取Storyboard
        return HumanViewController()
    }

    func updateUIViewController(_ uiViewController: HumanViewController, context: Context) {}
}

额外注意事项

  • 必须在Info.plist中添加摄像头权限描述NSCameraUsageDescription,否则应用调用摄像头时会直接闪退
  • 确保你已经将原demo中的3D模型资源character/robot导入到你的项目中,否则模型加载失败会看不到虚拟角色
  • 人体跟踪功能仅支持搭载A12及以上芯片的设备(iPhone XS/XR及更新机型),旧设备无法运行该功能

内容的提问来源于stack exchange,提问作者拔牙不打麻药

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:39:00