Ich habe ein kleines Fragen Spiel wo, wenn der Benutzer zu lange dauert zu beantworten, es Timeout und automatisch einen benutzerdefinierten Übergang zu einem bestimmten Bildschirm auslöst.UIView Animation funktioniert nicht, wenn App in den Hintergrund geht
let firstClassView = self.sourceViewController.view
let secondClassView = self.destinationViewController.view
let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
firstClassView.clipsToBounds = true
secondClassView.clipsToBounds = true
let secondClassFrame = CGRect(x: screenWidth, y: 0, width: screenWidth, height: screenHeight)
secondClassView.frame = secondClassFrame
guard let window = UIApplication.sharedApplication().keyWindow else {
return
}
window.insertSubview(secondClassView, aboveSubview: firstClassView)
if let questionVC = self.destinationViewController as? QuestionResultViewController {
questionVC.prepareResultView()
}
UIView.animateWithDuration(0.4, animations: {() -> Void in
firstClassView.frame = CGRectOffset(firstClassView.frame, -screenWidth, 0)
secondClassView.frame = CGRectOffset(secondClassView.frame, -screenWidth, 0)
}) {_ -> Void in
self.sourceViewController.presentViewController(self.destinationViewController, animated: false, completion: nil)
}
Dieser Code und das Segue funktioniert gut, außer wenn der Benutzer die App in den Hintergrund sendet (und öffnet sie wieder) vor dem Übergang. In diesem Fall ist der UIView.animate Block erreicht, aber sein Inhalt scheint nie aufgerufen zu werden, so dass keine Animation abgespielt wird! (Ich habe einen Druckbefehl in dort, und es wurde nicht ausgelöst wird)
Wenn meine Beschreibung verwirrend war:
Fall 1:
Benutzer erreicht Frage Bildschirm
Frage des Timer-Zeitüberschreitung
Segue-Trigger
Animationsblock erreicht und spielt perfekt
Fall 2:
Benutzer erreicht Frage Bildschirm
Sendet App Hintergrund
App öffnet wieder
Frage der Timer abläuft
Segue löst
Animations Block erreicht ist, aber es passiert nichts -> ???
Warum passiert das? Ich habe versucht mit layoutIfNeeded und es ist Variationen, aber nichts hat funktioniert. Der Inhalt des Animationsblocks wird nie aufgerufen. Bei meinen Tests mit Haltepunkten stoppt die App vollständig, bevor sie die UIView-Zeile erreicht (und stürzt nach ~ 10 Sekunden ab).
Ihr Code ist keine korrekte benutzerdefinierte Präsentationsanimation, so dass Sie nicht überrascht sein können, wenn etwas kaputt geht. Sie können nicht einfach mit Frames herumspielen und einen presentViewController machen. Sie müssen eine geeignete benutzerdefinierte Präsentationsanimation schreiben. Was Sie tun, war _always_ falsch. – matt
Können Sie mich mit einem korrekten Beispiel verknüpfen? – Swordz
https://github.com/matnteub/Programming-iOS-Book-Examples/blob/master/bk2ch06p302addingPresentationController/PresentationController/ViewController2.swift – matt