2017-09-05 8 views
0

J'ai essayé de créer une méthode rapide qui me permettra de remplacer n'importe quel UIView par un spinner juste avant qu'un processus ne commence et de montrer à nouveau la vue une fois mon processus terminé. Pour une raison quelconque, l'UIView disparaît mais le spinner ne se montre jamais. Ce sont les méthodes en question:Remplacement d'une vue avec un UIActivityIndicator par programme

func showLoader(view: UIView, controller: UIViewController) -> UIActivityIndicatorView { 

    let spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray) 
    spinner.color = AC_BLUE 
    spinner.center = view.center 
    spinner.startAnimating() 

    view.alpha = 0 
    controller.view.addSubview(spinner) 

    return spinner 
} 

func hideLoader(view: UIView, spinner: UIActivityIndicatorView) { 

    view.alpha = 1 
    spinner.removeFromSuperview() 

} 

..which j'appelle avec quelque chose comme ceci:

let spinner = Extensions().showLoader(view: signInBtn, controller: self) 

APICalls().getUser(email: usernameTextField.text!, pass: passwordTextField.text!) { success, user in 

    //..CODE..// 
    Extensions().hideLoader(view: self.signInBtn, spinner: spinner) 

} 

Aussi, j'ai essayé centrant sur l'écran principal de VC, et qui fonctionne. Donc je devine que cela doit être lié à la position de la vue.

Merci!

+0

Il semble que vous ajoutez le 'spinner' à la vue. Ensuite, vous configurez la vue pour avoir un alpha de '0' qui signifie que tout ce qui est une' sous-vue 'de la vue aura aussi un alpha de '0'. – zsteed

+0

Non, je l'ajoute à la vue principale du contrôleur (aka .. controller.view ...) –

+0

Avez-vous essayé d'utiliser la 'View View Hierarchy' pour voir si elle est visible sur l'écran n'importe où? – zsteed

Répondre

1

Essayez le réglage avant d'ajouter la fileuse à la vue des contrôleurs (au lieu de l'ancien spinner.center = view.center):

spinner.center = view.superview!.convert(view.center, to: controller.view) 

Vous devez convertir center du view aux coordonnées du controller.view.