ReplayKit RPBroadcastActivityViewController iPad

Как представить RPBroadcastActivityViewController на iPad.

Я использую стандартный код, чтобы начать запись

   RPBroadcastActivityViewController.load { [unowned self] (broadcastActivityViewController, error) in

        // If an error has occurred, display an alert to the user.
        if let error = error {
            self.showAlert(message: error.localizedDescription)
            return
        }

        // Present vc
        if let broadcastActivityViewController = broadcastActivityViewController {

            broadcastActivityViewController.delegate = self

            // present
            self.present(...
        }
    }

Работает на iPhone, но на iPad ничего не отображается, и приложение как бы зависает. Я проверял игры в магазине приложений, в которых используется эта функция, и заметил ту же проблему.

Например, в игре Tower Dash ничего не отображается при нажатии кнопки прямой трансляции на iPad, она работает только на iPhone.

Я пытался поиграть с всплывающими презентациями, но ничего не работает.

Я что-то упускаю?

ОБНОВЛЕНИЕ: похоже, это ошибка. Это происходит даже в собственном приложении Apple Swift Playground.

ОБНОВЛЕНИЕ 2: Apple фактически ответила на мой отчет об ошибке и сказала мне, что мне нужно представить View Controller на iPad в виде всплывающего окна, например так

  UIDevice.current.userInterfaceIdiom == .pad {
       broadcastAVC.popoverPresentationController?.sourceView = view
       broadcastAVC.popoverPresentationController?.sourceRect = CGRect(x: view.bounds.midX, y: view.bounds.midY, width: 0, height: 0)
       broadcastAVC.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.init(rawValue: 0) // no arrow
  }

Однако это все еще не работает для меня. Как я уже упоминал, это происходит в собственном приложении Apple Swift Playground, поэтому это должно быть ошибкой.

Исправлена:

Я забыл добавить эту строку в код, упомянутый выше

 broadcastAVC.modalPresentationStyle = .popover

person crashoverride777    schedule 21.09.2016    source источник
comment
вы написали отчет об ошибке?   -  person Dima Deplov    schedule 28.09.2016
comment
Да. Я думаю, что это должно быть ошибкой, потому что это происходит и с их собственным приложением для быстрой игровой площадки. Ответа от них пока нет (28411422)   -  person crashoverride777    schedule 28.09.2016
comment
Надеюсь, они это скоро исправят :)   -  person Dima Deplov    schedule 29.09.2016
comment
Они на самом деле ответили мне на сообщение об ошибке. Они говорят, что мне нужно представить контроллер представления на iPad как всплывающее окно, подобное тому, что вы должны сделать, когда хотите представить UIActivityController на iPad. Все еще не работает для меня.   -  person crashoverride777    schedule 02.10.2016
comment
Я забыл добавить эту строку кода ...modalPresentationStyle = .popover.   -  person crashoverride777    schedule 19.11.2016
comment
Привет! Это действительно работает на iOS 10.1? У меня все еще есть некоторые проблемы, он просто ничего не делает, и я вижу это предупреждение в консоли отладчика (используя Xcode 10) viewServiceDidTerminateWithError Можете ли вы мне помочь, пожалуйста? Заранее спасибо!   -  person Alex    schedule 09.12.2016
comment
Эй, да работает отлично для меня. Не знаю, что означает это сообщение. Может быть, задайте вопрос, я посмотрю   -  person crashoverride777    schedule 09.12.2016
comment
Не могли бы вы поделиться примером проекта или фрагментом кода? Поскольку я все еще получаю ту же ошибку, мой пользовательский интерфейс просто зависает :( Я следовал вашему примеру на 100% и все еще безуспешно   -  person Alex    schedule 14.12.2016
comment
Почему бы вам не опубликовать вопрос, и я посмотрю   -  person crashoverride777    schedule 15.12.2016
comment
Вы когда-нибудь заставляли это работать?   -  person Matt    schedule 08.04.2020
comment
Эй, вы пробовали некоторые из предоставленных ответов? Я заработал, но у меня больше нет кода, потому что я удалил ReplayKit из своих игр довольно давно. По сути, это встроенная функция iOS, которая теперь находится в центре управления, поэтому казалось, что она больше не нужна. Если вы представляете всплывающее окно и правильно прикрепляете его, оно должно работать.   -  person crashoverride777    schedule 09.04.2020


Ответы (2)


Вы правы в том, что демонстрационное приложение Apple не включает эту маленькую деталь, но это не ошибка. Это то, что я использую, чтобы заставить его работать на iPad. Для iPad требуется всплывающее окно для представления представления, а всплывающее окно нуждается в привязке. Я решил привязать его к leftBarButtonItem.

if let unwrappedPreview = preview {
            unwrappedPreview.previewControllerDelegate = self

            if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.phone {
                self.present(unwrappedPreview, animated: true, completion: nil)
            }
            else {
                unwrappedPreview.popoverPresentationController?.barButtonItem = self.navigationItem.leftBarButtonItem!
                unwrappedPreview.modalPresentationStyle = UIModalPresentationStyle.popover
                unwrappedPreview.preferredContentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
                self.present(unwrappedPreview, animated: true, completion: nil)

            }
        }
person Chris3643    schedule 07.11.2016
comment
Эй, спасибо за ваш ответ. Любая идея, почему это не работает для меня? Я уже делаю это (см. обновление 2 моего вопроса), и это все еще не работает. Это тот же код, который я использую для UIActivityControllers, и он там работает. - person crashoverride777; 07.11.2016
comment
Исправлена. Я забыл добавить эту строку кода ...modalPresentationStyle = .popover. Спасибо за помощь. - person crashoverride777; 19.11.2016

iOS 10.1 beta 2 по-прежнему имеет ту же проблему.

На данный момент я обнаружил, что единственный способ представить RPBroadcastActivityViewController на iPad — это представить его в горизонтальной компактной среде коллекции признаков.

Таким образом, вам может потребоваться сообщить пользователю о переключении в режим разделенного просмотра, прежде чем выбрать приложение с поддержкой вещания, а затем переключиться обратно в полноэкранный режим. Вернувшись в полноэкранный режим, вы можете использовать RPBroadcastController.startBroadcast(handler:), чтобы начать трансляцию.

person Jonny    schedule 08.10.2016
comment
Спасибо за этот ответ. Надеюсь, Apple скоро это исправит. - person crashoverride777; 08.10.2016