Мне нужно остановить запись экрана, однако мне нужно разрешить обмен видео через 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, но это может быть единственным способом