Не удается скрыть кнопку "Поделиться" в USDZ + QLPreviewController

Я получил проект, включающий несколько файлов 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)   
}  

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
    }

Проверка версии не обязательна.

Вместо возвращения QLPreviewItem, используйте ARQuickLookPreviewItem который соответствует этому протоколу.

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

Затем назначьте URL-адрес, которым вы хотите поделиться (который появится на листе общего доступа) в canonicalWebPageURLсвойство. По умолчанию это свойство использует URL-адрес файла (в данном случае URL-адрес файла USDZ). Это не приведет к раскрытию URL-адресов ваших файлов.

Мой подход - добавить 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)

Смещения у происхождения и размера фрейма может изменяться. Это гарантирует, что представление AR QuickLook будет того же размера, что и UIView, и одновременно скроет кнопки (к сожалению, все).

Я не смог добраться до кнопки "Поделиться", чтобы скрыть или отключить ее. Потратил дни, чтобы преодолеть это. Я сделал довольно непрофессиональный способ его преодоления. Подпишите QLPreviewController на ViewController и подпишите кнопку или представление поверх кнопки общего доступа. Он будет там постоянно, даже в верхнем экране в режиме AR скрывается даже верхняя панель. Не чистое решение. Но работает.

TLDR: я не думаю, что ты можешь.

Я не видел ни одного сеанса WWDC, даже упомянув об этом, и я не могу найти никакой документации для разработчиков. Я почти уверен, что смысл ARKit QLPreviewController в том, что вам не нужно делать никакого реального кодирования на стороне AR. Я вижу привлекательность для этого и для настройки в целом, однако, я бы предложил вместо этого взглянуть на некоторые из других проектов ARKit, которые Apple выпустила, и попытаться воссоздать их с нуля, а не разбирать их на части.

Пожалуйста, сообщите, если это изменится, поскольку я хотел бы сделать что-то подобное, особенно в Safari.

Другие вопросы по тегам