0
votes

UIViewController Rejeter le problème

Je veux attendre jusqu'à ce que rejeter l'animation, mais je ne veux pas utiliser de nombreux blocs dans mon code, j'ai donc écrit cette fonction dans uiviewcontroller code> extension code> (presque comme Cela a fonctionné il y a plusieurs années pour moi): xxx pré>

alors maintenant au lieu de: p> xxx pré>

i était censé écrire: p>

viewController.dismissAnimated()
// code after completion


0 commentaires

3 Réponses :


0
votes

Il ne renvoie pas parce que votre tandis que! Terminé La boucle a bloqué le fil principal et la mise à jour de l'interface utilisateur se produit sur le fil principal. Ce qui ne va pas avec le fonctionnement du code que vous devez exécuter à l'intérieur du rejeter Fermeture d'achèvement? XXX


1 commentaires

En raison de l'amélioration de la décision d'archicicture, je ferais mieux d'utiliser le code sans bloc, la question est de savoir comment faire de cette décision de travailler. Et cela a fonctionné sur iOS 9 ou quelque chose comme celui-ci (peut être avec des changements de code, car je ne trouve pas mon code source). Je cours à la fois d'être runloop pour éviter de bloquer le fil principal. Par exemple, si je mets dans Dispatchque.Main.Asyncaster, cela fonctionnera, le problème est avec licenciement



0
votes

S'il s'agit vraiment de ne pas utiliser de blocs peut-être que cela peut être une solution?

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)

    if self.navigationController?.isBeingDismissed ?? self.isBeingDismissed  {
        print("Dismissal completed...")
    }
}


2 commentaires

Non, j'ai besoin d'accomplir la tâche en utilisant Runloop car le code presque comme celui-ci a précédé


Effectivement trouvé une solution qui fonctionne. Voir nouvelle réponse.



1
votes

J'ai essayé à nouveau parce que j'étais curieux et cette solution fonctionne réellement pour moi: xxx

iOS 12.1.2 | SWIFT 4.2


1 commentaires

Merci, cela fonctionne, il ne fonctionne réellement que lorsque je tapote, si j'appelle démissanimé () de DispatchQueue.Main, cela ne fonctionne pas (licenciement des travaux mais l'achèvement jamais appelé), mais je vais essayer de le comprendre), mais je vais essayer de le comprendre