【iOS ARKit】App 中嵌入 AR Quick Look

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

      AR Quick Look 功能强盛,但在应用中嵌入并利用它实现 AR体验却非常简单,如其他全部QuickLook利用一样,简单到只需要提供一个文件名就可以达到目标。
      AR Quick Look 支持.usdz 和.reality 两种格式文件,如果在 Xcode 工程中引入了 Reality Composer 工程文件(.rcproject),在 Xcode 编译时会主动将.reproject 文件转换成. realtiy 格式打包进应用步伐包中。
      在应用中嵌人并利用 AR Quick Look 时需要遵照 QLPreviewControllerDataSource 协议并实现该协议定的两方法,如表1所示。
表1QLPreviewControllerDataSource 协议方法

numberOfPreviewItems (in: QLPreviewController) -> Int
AR Quick Look 需要知道浏览的模子数目,通常返回1
previewController (QLPreviewController, previewItemAt: Int) -> QLPreviewItem
提供給 AR Quick Look 具体需要展示的模子
描述
方法名称
      在 previewController ()方法中,我们可以直接返回 QLPreviewltem 类型实例,也可以返回ARQuickLookPreviewltem类型实例。ARQuickLookFreviewltem 类继续自 QLPreviewItem类,是专为AR 展示定制的类型,该类提供了两个 AR 专用属性:allowsContentScaling 和 canonical WebPageURL,其中 allowsContentScaling 为布尔值,用于设置是否允许缩放模子,这在一些实物展示类应用场合会比较有用 如家具展示,一样平常没有必要允许利用者缩放模子;canonicalWebPageURL用于设置分享的文件 URL,如果设置了该值,在利用 AR Quick Look 分享时会分享该链接地址,而如果没有设置则会直接分享模子文件(.usdz或.reality 文件)。
    下面模仿实际利用场景进行演示,为简单起见,我们只在主场景中设置一个按钮,当用户单击这个按钮时会调用 AR Quick Look展示指定的模子,并设置是否允许缩放和分享链接属性。
    (1) 新建一个 SwiftUI View 文件,命名为 ARQuickLookView,具体代码如下。
  1. import SwiftUI
  2. import QuickLook
  3. import ARKit
  4. struct ARQuickLookViewController: UIViewControllerRepresentable {
  5.     var fileName: String
  6.     var allowScaling: Bool
  7.     func makeCoordinator() -> ARQuickLookViewController.Coordinator {
  8.         Coordinator(self)
  9.     }
  10.    
  11.     func makeUIViewController(context: Context) -> UIViewController {
  12.         let controller = QLPreviewController()
  13.         controller.dataSource = context.coordinator
  14.         
  15.         return controller
  16.     }
  17.    
  18.     func updateUIViewController(_ controller: UIViewController,context: Context) {}
  19.    
  20.     class Coordinator: NSObject, QLPreviewControllerDataSource {
  21.         let parent: ARQuickLookViewController
  22.         private lazy var fileURL: URL = Bundle.main.url(forResource: parent.fileName,withExtension: "usdz")!
  23.         init(_ parent: ARQuickLookViewController) {
  24.             self.parent = parent
  25.             super.init()
  26.         }
  27.         func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
  28.             return 1
  29.         }
  30.         func previewController(_ controller: QLPreviewController,previewItemAt index: Int) -> QLPreviewItem {
  31.             guard let filePath = Bundle.main.url(forResource: parent.fileName, withExtension: "usdz") else {fatalError("无法加载模型")}
  32.             let item = ARQuickLookPreviewItem(fileAt: filePath)
  33.             item.allowsContentScaling = parent.allowScaling
  34.             
  35.             item.canonicalWebPageURL = URL(string: "https://www.example.com/example.usdz")
  36.             return item
  37.         }
  38.     }
  39. }
复制代码
     在上述代码中,我们首先定义了 fileName、allowScaling 两个变量用于存储 ARQuickLookPreviewItem属性信息,然后遵照了 QLPreviewControllerDataSource 协议并实现了该协议的两个方法。将该类独立出来是为了更好地组织代码、方便利用、简化主代码逻辑。
    (2)在主场景中放置一个按钮,并设置当按钮单击时启用 AR Quick Look 并显示实例化的ARQuickLookView 场景。代码如下所示。
  1. struct ARQuickLookView : View {
  2.     @State var showingPreview = false
  3.     var body: some View {
  4.         ARQuickLookViewController(fileName: "fender_stratocaster",allowScaling:true)
  5.         .edgesIgnoringSafeArea(.all)
  6.         .navigationTitle("AR Quick Look")
  7.     }
  8. }
复制代码
    在代码中,由于 AR Quick Look 利用代码已封装到 ARQuickLookView 结构体中,因此在主代码中直接调用即可,效果如图所示。​​​​​​​

     在iOS 13及以上版本体系中,AR Quick Look 还支持多模子展示,并支持环境光照明,这大大地拓宽了其利用范畴,可以实现诸如家具部署、模子对比等功能。别的,AR Quick Look 与 Reality Composer 的结合,对设计人员非常友爱,可以快速开辟出AR 应用原型。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表