У меня есть код, который помещает размытое UIVisualEffectView
поверх текущего окна, когда срабатывает уведомление didEnterBackgroundNotification
.Затем он пытается отменить это при запуске willEnterForegroundNotification
(упрощено для удобного чтения):
class AutoBlur {
init() {
NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
@objc func appDidEnterBackground() {
blur()
}
@objc func appWillEnterForeground() {
guard UserState.isScreenLockEnabled else {
unblur()
return
}
let authContext = LAContext()
authContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "test") { success, error in
DispatchQueue.main.async {
guard success else {
return
}
unblur()
}
}
}
//...
}
Хотя этот подход обычно работает, при тестировании функциональности приложения Face ID приложения я обнаружил следующую аномалию:
- Откройте приложение
- Выключите экран на устройстве
- Включите устройство
- Проведите пальцем вверх по экрану блокировки устройства
Ожидаемые результаты: устройство должно разблокироваться, а затем мое приложение должно запустить свой код оценки идентификатора лица, чтобы не размыть представление.
Фактические результаты: действие смахивания подрезается моим приложениемКод оценки идентификатора лица.Он не дает пользователю возможности проводить пальцем по экрану блокировки, эффективно блокируя его на своем устройстве.
Есть ли какое-либо состояние, за которым я должен следить, или какое-то другое событие, на которое безопаснее реагировать для запуска моегоОценка лица?