【iOS ARKit】App 中嵌入 AR Quick Look
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,具体代码如下。
import SwiftUI
import QuickLook
import ARKit
struct ARQuickLookViewController: UIViewControllerRepresentable {
var fileName: String
var allowScaling: Bool
func makeCoordinator() -> ARQuickLookViewController.Coordinator {
Coordinator(self)
}
func makeUIViewController(context: Context) -> UIViewController {
let controller = QLPreviewController()
controller.dataSource = context.coordinator
return controller
}
func updateUIViewController(_ controller: UIViewController,context: Context) {}
class Coordinator: NSObject, QLPreviewControllerDataSource {
let parent: ARQuickLookViewController
private lazy var fileURL: URL = Bundle.main.url(forResource: parent.fileName,withExtension: "usdz")!
init(_ parent: ARQuickLookViewController) {
self.parent = parent
super.init()
}
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}
func previewController(_ controller: QLPreviewController,previewItemAt index: Int) -> QLPreviewItem {
guard let filePath = Bundle.main.url(forResource: parent.fileName, withExtension: "usdz") else {fatalError("无法加载模型")}
let item = ARQuickLookPreviewItem(fileAt: filePath)
item.allowsContentScaling = parent.allowScaling
item.canonicalWebPageURL = URL(string: "https://www.example.com/example.usdz")
return item
}
}
}
在上述代码中,我们首先定义了 fileName、allowScaling 两个变量用于存储 ARQuickLookPreviewItem属性信息,然后遵照了 QLPreviewControllerDataSource 协议并实现了该协议的两个方法。将该类独立出来是为了更好地组织代码、方便利用、简化主代码逻辑。
(2)在主场景中放置一个按钮,并设置当按钮单击时启用 AR Quick Look 并显示实例化的ARQuickLookView 场景。代码如下所示。
struct ARQuickLookView : View {
@State var showingPreview = false
var body: some View {
ARQuickLookViewController(fileName: "fender_stratocaster",allowScaling:true)
.edgesIgnoringSafeArea(.all)
.navigationTitle("AR Quick Look")
}
} 在代码中,由于 AR Quick Look 利用代码已封装到 ARQuickLookView 结构体中,因此在主代码中直接调用即可,效果如图所示。https://i-blog.csdnimg.cn/blog_migrate/664bd9392b1254b12633fae57c2825ca.png
在iOS 13及以上版本体系中,AR Quick Look 还支持多模子展示,并支持环境光照明,这大大地拓宽了其利用范畴,可以实现诸如家具部署、模子对比等功能。别的,AR Quick Look 与 Reality Composer 的结合,对设计人员非常友爱,可以快速开辟出AR 应用原型。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]