我正在开发一个具有AR功能的iOS购物应用程序。用户可以使用iOS快速查看在AR中预览产品。AR模型是usdz文件。
由于应用程序/设计要求,我不得不添加自定义视图上的快速屏幕。用户应该能够在AR Quicklook中选择颜色,因此我创建了一个从QLPreviewController派生的新的视图控制器,并添加了一些UI组件(集合视图、按钮等)。我对每种颜色都有不同的模型,所以当用户选择颜色时,App应该加载不同的模型(usdz文件)。这是代码片段。
class ARViewController: QLPreviewController {
override func viewDidLoad() {
// add UI elements here (collectionview, buttons, ..)
}
}到现在为止一切都很好。我可以打开AR快速查看和可以放置对象的第一次。
问题是
这是QLPreviewDataSource代码
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函数。
self.reloadData() // Also tried self.refreshCurrentPreviewItem() but same issue任何帮助都将不胜感激。谢谢!
发布于 2021-11-23 11:50:27
查看this解决方案,以检查是否相应地实现了QLPreviewController委托方法。您可以在ARViewController的扩展中为下面发布的代码使用它们。
除了上面的内容之外,下面的代码片段必须是有帮助的。这不完全是你的案子,但有效。我在这里使用了TableView控制器和一个单独的名为ARObjectTableViewCell的XIB文件。
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)
}
}https://stackoverflow.com/questions/70078882
复制相似问题