Блокировать перекодирование экрана, но разрешить зеркалирование экрана HDMI Swift 4 - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужно остановить запись экрана, однако мне нужно разрешить обмен видео через HDMI.

Я знаю, что для этого обычно используется захваченное уведомление, но я не могу найти способ отделить эти две вещи.

 UIScreen.main.addObserver(self, forKeyPath: "captured", options: .new, context: nil)

Вышеуказанные уведомления запускаются, когда запись экрана начинается / останавливается,Но также срабатывает, когда внешний дисплей подключен / отключен (хотя я нахожу его здесь прерывистым).

Я попытался использовать следующее, чтобы определить, зеркально ли отображается экран на экране UIS или просто проверитьколичество экрановЗаписи показывают только один экран в счетчике, а зеркальные экраны должны показывать счет 2

         recordingLabel.text = "count \(UIScreen.screens.count)"
            for screen in UIScreen.screens {
                if screen.mirrored != nil {
                    recordingLabel.text = "Mirrored - count \(UIScreen.screens.count)"
                }

            }

Но, опять же, это периодически.В большинстве случаев при подключении экрана HDMI счетчик не изменяется, но при отключении он изменяется на 2.

Я также обнаружил, что использование уведомлений UIScreen работает для подключенных / отключенных.Но, похоже, с захваченным уведомлением возникает состояние гонки, которое мне все еще нужно обрабатывать записи.

            NotificationCenter.default.addObserver(self, selector: #selector(connected), name: UIScreen.didConnectNotification, object: nil)
            NotificationCenter.default.addObserver(self, selector: #selector(disconnected), name: UIScreen.didDisconnectNotification, object: nil)

Есть ли способ определить тип записи или предотвратить гонку, когда оба типатриггер уведомлений?

РЕДАКТИРОВАТЬ: с тех пор я нашел

NotificationCenter.default.addObserver(self, selector: #selector(captureChanged(notification:)), name: UIScreen.capturedDidChangeNotification, object: nil)

, который работает лучше с уведомлениями о соединении, но все еще срабатывает, прежде чем я получаю уведомление о подключении.На самом деле я не хочу добавлять таймер, чтобы определять, срабатывает ли уведомление didConnect после captureChange, но это может быть единственным способом

...