我有一些代码,当触发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功能时,我发现以下异常:
预期结果:设备应解锁,然后我的应用程序应运行其Face ID评估代码以取消对视图的模糊处理。
实际结果:向上滑动动作被我的应用程序的Face ID评估代码削弱了。这样会阻止用户在锁定屏幕上向上滑动,从而有效地将其锁定在设备之外。
我是否应该监视某些状态,或者是否有其他更安全的事件来触发我的Face ID评估?