Andere modale Ansicht von UIImagePickerController
Möchte ich hinzufügen, um eine Bestätigung anzuzeigen, nachdem der Benutzer ein Foto oder wählt ein gespeichertes Foto. Die Bestätigung Ansicht zeigt nur das ausgewählte Bild mit einem Abbrechen-und upload-button in einer Symbolleiste.
Meine UIImagePickerController präsentiert Modal von einem meiner view-Controller, gesteuert wird, die von einem navigation-controller, die wiederum gesteuert durch einen tab bar controller.
Wie präsentiere ich meine Bestätigung Ansicht Modal, so dass es nimmt den ganzen Bildschirm (wie die Bildauswahl anzuzeigen), wenn der Benutzer wählt ein Foto? Idealerweise möchte ich so etwas wie dieses:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissModalViewControllerAnimated:YES];
UIViewController *modal = [[UIViewController alloc] init];
modal.view = confirmationView;
[self presentModalViewController:modal animated:YES];
[modal release];
}
Jedoch, dass Abstürze der app. Sollte ich präsentieren, der die Bestätigung Ansicht Modal, die aus dem PICKER? Wenn ja, wie kann ich sicherstellen, dass, wenn die Bestätigungs-Ansicht geschlossen wird, kann der picker wird nicht angezeigt?
EDIT:
Behoben den Fehler in der code, den ich gepostet. Das ist, was passiert, wenn ich versuche, eine Art von Speicher, anstatt copy+paste 🙁 na ja, die Vorschläge, die bisher nicht helfen.
Wenn ich die modal-controller haben, DANN schließen Sie die picker, passiert nichts, vermutlich da beide Controller sind anschließend entlassen.
Wenn ich entlassen die picker DANN die modal-controller, bekomme ich auch eine exception zu modalen übergängen:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from <UINavigationController: 0x6b33940> to <UIViewController: 0x6b62b00> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung gefunden. Ja, der picker muss entlassen werden, und der trick ist, schalten Sie Animationen aus für die Entlassung, so dass es sofort geschieht, und dann die zweite modal anzeigen.
EDIT: Tatsächlich, es bringt mich FAST um, was ich will. Wenn Sie schließen Sie die picker, die ursprüngliche Ansicht wird angezeigt, für einen Bruchteil einer Sekunde, und dann der modal-Ansicht animiert. Das sieht ein wenig funky.
Ich auch versucht zu halten, kann der picker sich um und Sie nicht ab. Stattdessen rufe ich
[picker presentModalViewController:modal animated:YES]
. Dies ermöglicht mir reibungslos übergang von der Kommissionierer zur Bestätigung anzeigen. Allerdings, wenn ich fertig bin mit der Bestätigung anzeigen, muss ich anrufen[self dismissModalViewControllerAnimated:YES]
aus dem original-controller. Dies hat den Effekt, zeigt die Bildauswahl zunächst vor dem schließen alles. Wieder nicht ganz das, was ich will.Idealerweise möchte ich den gleichen Effekt, dass die Facebook-iPhone-app nutzt für das hochladen von Fotos. Sobald Sie ein Foto ausgewählt, es übergänge nahtlos, um eine Bestätigung anzuzeigen. Stornierung oder Bestätigung aus, die Sicht nahtlos übergang zurück zu der ursprünglichen, Haupt-Ansicht. Es macht es Aussehen wie in der Bestätigungs-Ansicht ist Teil der image-picker, wenn es ist wahrscheinlich nur eine andere benutzerdefinierte Ansicht.
Wie mache ich das??
Versuchen, diese...
Du bist die Freigabe modal, bevor wir es. Versuchen Sie dies:
Ah. Es sieht aus wie Sie können nicht vorhanden und schließen ein modal-view-controller in der gleichen Methode.
Könnte man eine Eigenschaft (zu helfen, mit memory-management) zum speichern der info-Wörterbuch, und ein ivar zu speichern, so etwas wie "didSelectImage". Dann in viewDidAppear: der view-controller, wenn didSelectImage == JA, präsentieren Sie Ihre view-controller Modal mit den Angaben in der info-Wörterbuch.
Sicher sein, dass zum zurücksetzen didSelectImage zurück auf NEIN und setzen Sie das info-dictionary-Eigenschaft auf null, sobald Sie nicht mehr benötigt werden.
Dieser arbeitete für mich:
Das heißt, Sie präsentieren den View-Controllern wie diese
A => B(modal) => C(modal)
, und Sie rufen dann entlassen aus View-Controller Ein, um miss B und C auf einmal.