Ich möchte einen View Controller modal mit benutzerdefinierten Übergängen darstellen. Zur gleichen Zeit möchte ich sicherstellen, dass, wenn es entlassen wird, der View-Controller dahinter ist bekannt, in den Vordergrund geschoben werden.Trigger viewWillAppear bei Verwendung eines übergehenden Delegaten
Meine Grundidee ist es, einige verschiedene Konfigurationen auszuprobieren und zu sehen, welche zu viewWillAppear
aufgerufen wird auf dem View-Controller dahinter.
Versuch 1
presentedViewController.modalPresentationStyle = .Custom
presentedViewController.transitioningDelegate = someTransitioningDelegate
Dies ist der Standard-Ansatz, und der benutzerdefinierte Übergang funktioniert perfekt in Ordnung, aber ich will viewWillAppear
hinter presentedViewController
auf den View-Controller aufgerufen werden, wenn ich presentedViewController.dismissViewControllerAnimated(true)
nennen (was nicht geschehen). Also tat ich dies:
Versuch 2
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.transitioningDelegate = someTransitioningDelegate
oder
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.modalTransitionStyle = .CoverVertical
presentedViewController.transitioningDelegate = someTransitioningDelegate
Jetzt viewWillAppear
auf den View-Controller hinter presentedViewController
aufgerufen wird, wenn presentedViewController
entlassen, und der Übergang erfolgt wie erwartet, wenn präsentiert der View-Controller.
Wenn jedoch View-Controller zu entlassen, der Hintergrund während des Übergangs ist schwarz; scheint, dass .FullScreen
bewirkt, dass die View-Controller hinter presentedViewController
aus der View-Hierarchie entfernt werden - was gut ist, weil das vermutlich den Aufruf viewWillAppear
auslöst.
Versuch 3
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.modalTransitionStyle = .CoverVertical
Interessanterweise, wenn .CoverVertical
angegeben ist, aber die transitioningDelegate
nicht, dann wird der Hintergrund während des Übergangs tatsächlich wird der View-Controller hinter presentedViewController
, liegt aber viewWillAppear
wird aufgerufen der View-Controller hinter presentedViewController
sowieso. Das einzige, was fehlt, ist der benutzerdefinierte Übergang.
Das Projekt arbeite ich an ist so strukturiert, dass es schwierig macht, eine Delegation zu verwenden (was die vorgeschlagene Antwort here zu sein scheint).Verwendung von NSNotificationCenter
zu machen ist eine weitere Alternative, die mir den Code nennen wir die von viewWillAppear
zu heißen soll, aber von Versuch 3, ich bin es Hoffnung, ist ein eleganter Ansatz, alle diese zu erreichen:
- Trigger-
viewWillAppear
- Verwenden Sie einen benutzerdefinierten Übergang
- die view-Controller Siehe im Hintergrund während der Übergangsanimation