2016-07-28 3 views
3

Je voulais flouter l'arrière-plan lorsque l'identifiant tactile est demandé et une fois l'autorisation réussie, le viewcontroller doit être visible.Mais ce n'est pas le cas.Le viewcontroller est toujours flou même si l'autorisation est réussie .Peut-on m'aider à résoudre ce problème?removeFromSuperview() ne fonctionnait pas

import UIKit 
import LocalAuthentication 
class TabBarViewController: UITabBarController { 

@IBOutlet weak var noteTabBar: UITabBar! 

override func viewDidLoad() { 
super.viewDidLoad() 
    self.authenticateUser() 
    self.tabBar.hidden = false 
    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 

    let userDefaults = NSUserDefaults.standardUserDefaults() 
    userDefaults.setObject(false, forKey: "sendModeToggle") 
    userDefaults.setObject("Avenir-Medium", forKey: "font") 
    userDefaults.setObject(13, forKey:"fontSize") 
      // Do any additional setup after loading the view. 
} 
override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

// MARK: Touch ID Authentication 

func authenticateUser() 
{ 
    let context = LAContext() 
    var error: NSError? 
    let reasonString = "Authentication is needed to access your app! :)" 

    let blurEffect = UIBlurEffect(style: .Light) 
    let blurVisualEffectView = UIVisualEffectView(effect: blurEffect) 
    blurVisualEffectView.frame = view.bounds 
    self.view.addSubview(blurVisualEffectView) 

    if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error) 
    { 

     context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: { (success, policyError) -> Void in 

      if success 
      { 
       print("Authentication successful! :) ") 
       blurVisualEffectView.removeFromSuperview() 

      } 
      else 
      { 
       switch policyError!.code 
       { 
       case LAError.SystemCancel.rawValue: 
        print("Authentication was cancelled by the system.") 
       /*case LAError.UserCancel.rawValue: 
        print("Authentication was cancelled by the user.") 
       */ 
       case LAError.UserFallback.rawValue: 
        print("User selected to enter password.") 
        NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 
         self.showPasswordAlert() 
         blurVisualEffectView.removeFromSuperview() 

        }) 
       default: 
        print("Authentication failed! :(") 
        NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 
         self.showPasswordAlert() 
         blurVisualEffectView.removeFromSuperview() 

        }) 
       } 
      } 

     }) 

    } 
    else 
    { 
     print(error?.localizedDescription) 
     NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 
      self.showPasswordAlert() 
     }) 
    } 


} 

} 

Répondre

3

Puisque vous supprimez la vue en fermeture, vous n'êtes probablement pas dans le thread principal. Essayez d'envoyer le code suppression de thread principal:

if success { 
    print("Authentication successful! :) ") 
    dispatch_async(dispatch_get_main_queue()) { 
     blurVisualEffectView.removeFromSuperview() 
    } 
} 
+0

Essayé mais je reçois quelques erreurs Missing argument pour le paramètre # 2 dans l'appel expression prévue dans la liste des expressions s'il vous plaît me aider avec ce –

+0

@ VineethKrishnan désolé j'ai oublié de fermer l'accolade. Essayez maintenant –

+1

Merci beaucoup tout fonctionne bien –