0

我对 swift 和 xcode 非常陌生,当我在修补应用程序制作时,遇到了一个问题。我正在尝试创建一个按钮,在使用 FaceID 对我的脸进行身份验证后切换视图控制器。这就是我到目前为止所拥有的。当我按下按钮时,它会进行身份验证,但是当它转到另一个窗口时,标签和按钮就消失了。有谁知道为什么?任何事情都有帮助。谢谢 (:

注意:即使按钮不可见,它仍然可以使用。我知道这一点,因为当我在 Controller2 中并点击左上角的按钮时,它会完成操作。问题只是它不可见。

Controller1在左边,Controller2在右边 Controller1在左边,Controller2在右边

代码:

@IBAction func faceIDButton(_ sender: Any) {
    let context = LAContext()

    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "To sign in") { (wasSuccessful, errorInCode) in
            if wasSuccessful {
                self.performSegue(withIdentifier: "toSecondView", sender: self)
            }
        }
    }
}
4

1 回答 1

0

首先,您需要以模态方式呈现 vc 并使其主视图透明,只有完整的部分是您通过此识别面部的矩形

let vc = self.storyboard!.instantiateViewController(withIdentifier: "SecondVC") as! SecondVC
vc.delegate = self  //to send success of face detection 
vc.providesPresentationContextTransitionStyle = true 
vc.definesPresentationContext = true 
vc.modalPresentationStyle = .overCurrentContext  // modally key line
self.present(vc, animated: false, completion: nil)

您也可以在 IB 中为 secondVC 设置这些属性,或者将它们设置在由show segue 类型prepareForSegue触发的内部performSegue

其次,不要从第二个 vc 到第一个你只需要使用的 segue

self.dismiss(animated:true,completion:nil)

最终在后台线程中完成evaluatePolicy运行,因此如果您要使用 segue,请考虑这一点

DispatchQueue.main.async {
    self.performSegue(withIdentifier: "toSecondView", sender: self) 
}
于 2019-02-01T18:53:32.360 回答