2

我有一个项目,其中包含一些用于应用程序中嵌入的增强现实功能的 USDZ 文件。虽然这很好用,而且我们对它的执行方式非常满意,但 QLPreviewController 的内置共享按钮是我们想要删除的东西。对对象进行子类化没有任何效果,并且尝试使用委托方法中返回的控制器隐藏 rightBarButtonItem 仍然会在选择文件时显示按钮。我们使用的 USDZ + QLPreviewController 的实现非常基础。有没有办法解决这个问题?

func numberOfPreviewItems(in controller: QLPreviewController) -> Int {  
      return 1  
 }   


func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {  

     let url = Bundle.main.url(forResource: models[selectedObject], withExtension: "usdz")! controller.navigationItem.rirButtonItems = nil.   
// <- no effect return url as QLPreviewItem   

}  

 @IBAction func userDidSelectARExperience(_ sender: Any) {   
     let previewController = QLPreviewController()   
     previewController.dataSource = self   
     previewController.delegate = self   
     present(previewController, animated: true)   
}  
4

5 回答 5

2

而不是返回QLPreviewItem,使用ARQuickLookPreviewItem符合此协议的。

https://developer.apple.com/documentation/arkit/arquicklookpreviewitem

然后,在属性中分配一个您想要共享的 url(将出现在共享表中)canonicalWebPageURL。默认情况下,此属性共享文件 url(在本例中为 USDZ 文件 url)。这样做不会暴露您的文件 URL。

于 2020-02-15T06:33:52.867 回答
2

我的方法是将 QLPreviewController 添加为子视图。

container是故事板中的 UIView。

let preview = QLPreviewController()

preview.dataSource = self

preview.view.frame = CGRect(origin: CGPoint(x: 0, y: -45), size: CGSize(width: container.frame.size.width, height: container.frame.size.height+45) )

container.addSubview(preview.view)
preview.didMove(toParent: self)

框架的原点和大小的y 偏移量可能会有所不同。这将确保 AR QuickLook 视图与 UIView 的大小相同,并同时隐藏按钮(不幸的是,所有按钮)。

于 2019-08-12T18:11:25.193 回答
2

这是苹果官方给出的答案。使用 ARQuickLookPreviewItem 而不是 QLPreviewItem。并将其 canonicalWebPageURL 设置为一个 URL(可以是任何 URL)。

func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        guard let path = Bundle.main.path(forResource: "Experience", ofType: "usdz") else { fatalError("Couldn't find the supported input file.") }
        let url = URL(fileURLWithPath: path)
        if #available(iOS 13.0, *) {
            let item = ARQuickLookPreviewItem(fileAt: url)
            item.canonicalWebPageURL = URL(string: "http://www.google.com")
            return item
        } else { }
        return url as QLPreviewItem
    }

版本检查是可选的。

于 2020-10-13T23:29:26.180 回答
0

我根本无法使用共享按钮来隐藏或禁用它。花了几天的时间来克服这个。我做了相当不专业的方式来克服它。Subview QLPreviewController 到 ViewController 并在共享按钮顶部的图像视图顶部查看按钮或视图并将我的公司徽标设置为图像。它会一直存在,甚至顶部栏在 AR 模式下全屏隐藏。不是一个干净的解决方案。但有效。

于 2018-11-30T14:12:08.047 回答
0

TLDR:我认为你不能。

我还没有看到任何 WWDC 会议甚至提到这一点,而且我似乎找不到任何支持的开发人员文档。我很确定 ARKit QLPreviewController的意义在于,您不必在 AR 端进行任何实际编码。我可以看到这一点和一般定制的吸引力,但是,我建议改为查看 Apple 发布的其他一些 ARKit项目,并尝试从头开始重新创建这些项目,而不是把它拆开。

请告知这是否会发生变化,因为我想做类似的事情,尤其是在 Safari 中。

于 2018-11-16T20:32:01.163 回答