无法在USDZ + QLPreviewController中隐藏共享按钮

时间:2018-11-15 20:24:17

标签: swift qlpreviewcontroller usdz

我有一个项目,其中包含一些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)   
}  

5 个答案:

答案 0 :(得分:2)

使用符合本协议的QLPreviewItem而不是返回ARQuickLookPreviewItem

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

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

答案 1 :(得分:2)

这是Apple的官方回答。 使用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
    }

版本检查是可选的。

答案 2 :(得分:1)

我的方法是将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的大小相同,并同时隐藏按钮(不幸的是,所有按钮)。

答案 3 :(得分:0)

TLDR:我认为您不能。

我什至没有提到任何WWDC会议,而且我似乎找不到任何支持的开发人员文档。我很确定ARKit QLPreviewController的重点是,您不必必须在AR端进行任何实际的编码。我可以看到总体上对于此功能和自定义的吸引力,但是,我建议您查看一下Apple发布的其他ARKit projects,并尝试从头开始重新创建它们。剥离这。

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

答案 4 :(得分:0)

我根本无法使用共享按钮来隐藏或禁用它。花了几天的时间来克服这个问题。我采取了非专业的方式来克服它。将QLPreviewController子视图化为ViewController并在一个按钮或一个子视图中子视图化在共享按钮之上的图像视图之上,并将我的公司徽标设置为图像。它将一直存在,甚至在AR模式下,即使顶部的栏也全屏隐藏。不是干净的解决方案。但是有效。