首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改变ARQuickLook中的USDZ模型

改变ARQuickLook中的USDZ模型
EN

Stack Overflow用户
提问于 2021-11-23 10:04:50
回答 1查看 369关注 0票数 1

我正在开发一个具有AR功能的iOS购物应用程序。用户可以使用iOS快速查看在AR中预览产品。AR模型是usdz文件。

由于应用程序/设计要求,我不得不添加自定义视图上的快速屏幕。用户应该能够在AR Quicklook中选择颜色,因此我创建了一个从QLPreviewController派生的新的视图控制器,并添加了一些UI组件(集合视图、按钮等)。我对每种颜色都有不同的模型,所以当用户选择颜色时,App应该加载不同的模型(usdz文件)。这是代码片段。

代码语言:javascript
复制
class ARViewController: QLPreviewController {
    override func viewDidLoad() {
        // add UI elements here (collectionview, buttons, ..)
    }
}

到现在为止一切都很好。我可以打开AR快速查看和可以放置对象的第一次。

问题是

  • 当我通过选择集合视图单元改变产品时,Quicklook会自动切换到"Object“视图,甚至以前的模型都处于AR屏幕(相机)
  • AR屏幕(camera)成为禁用状态。我不能再在AR屏幕上看到新的车型了。我必须关闭AR屏幕以响应AR模式。或者,有时我必须重新启动应用程序(只是取消QLPreviewController并不适用于下一个AR视图)。

这是QLPreviewDataSource代码

代码语言:javascript
复制
class ViewController: QLPreviewControllerDataSource {
    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1 // I did try to update this number but did not worked
    }

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        let productUrl = getProductUrl()
        return productUrl as QLPreviewItem // I did try to pass ARQuickLookPreviewItem but same issue
    }
}

当用户点击Quiclook中的collectionViewCell时,我只是更新了AR模型名称,并调用了QLPreviewController的reloadData函数。

代码语言:javascript
复制
self.reloadData() // Also tried self.refreshCurrentPreviewItem() but same issue

任何帮助都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-11-23 11:50:27

查看this解决方案,以检查是否相应地实现了QLPreviewController委托方法。您可以在ARViewController的扩展中为下面发布的代码使用它们。

除了上面的内容之外,下面的代码片段必须是有帮助的。这不完全是你的案子,但有效。我在这里使用了TableView控制器和一个单独的名为ARObjectTableViewCell的XIB文件。

代码语言:javascript
复制
class ARViewController: UITableViewController {
    
    let models = ["model_01","model_02","model_03"]
    var selectedIndex: Int = 0
        
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let xib = UINib(nibName: "ARObjectTableViewCell", bundle: nil)            
        self.tableView.register(xib, 
                       forCellReuseIdentifier: "objectDetailCell")
    }
    
    override func tableView(_ tableView: UITableView,
          numberOfRowsInSection section: Int) -> Int {
        return self.models.count
    }
    
    override func tableView(_ tableView: UITableView,
                 cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell: ARObjectTableViewCell = tableView.dequeueReusableCell(
                        withIdentifier: "objectDetailCell",
                                   for: indexPath) as! ARObjectTableViewCell
        
        let modelName = models[indexPath.row]
        cell.modelLabel.text = modelName.uppercased()
        
        if let image = UIImage(named: "\(modelName)") {
            cell.modelImageView.image = image
        }
        return cell
    }
    
    override func tableView(_ tableView: UITableView,
         heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 150.0
    }
    
    override func tableView(_ tableView: UITableView,
               didSelectRowAt indexPath: IndexPath) {
        
        tableView.deselectRow(at: indexPath,
                        animated: true)
        
        self.selectedIndex = indexPath.row
        
        let previewController = QLPreviewController()
        previewController.delegate = self
        previewController.dataSource = self
        self.present(previewController, animated: true)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70078882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档