6

Ho un'applicazione che utilizza UIImagePickerView per consentire all'utente di scattare una foto con la propria fotocamera o selezionarne una dal rullino fotografico utilizzando UIImagePickerView.UIImagePickerView in modalità Camera mostra tutto nero su dismissViewController su iPad

Dopo aver ottenuto una foto, presento una finestra di dialogo diversa sulla parte superiore del selettore utilizzando [picker presentViewController:myViewController animated:YES completion:nil].

Se eseguo la mia app come app per iPhone (sul mio iPad), quando ignoro myViewController utilizzando [myviewController.presentingViewController dismissViewControllerAnimated:YES completion:nil] si torna a mostrare CameraRoll o CameraFeed per scattare un'altra foto.

Ma sull'iPad, se seleziono un'immagine, funziona, ma se sto scattando una foto utilizzando il feed della fotocamera, ottengo solo uno schermo nero.

Qualche idea del perché?

+0

quando stai visualizzando il controller di visualizzazione extra? dopo che l'utente ha premuto il pulsante "Usa"? L'ho provato e dopo aver eliminato il controller aggiuntivo, imagePicker mostrava l'immagine scelta (sì, ipad), anche se non è possibile fare altro con il selettore di immagini in quel momento poiché tutti i pulsanti sono disabilitati. sei disposto a fornire un esempio di codice dei tuoi metodi UIPickerDelegate? – bazik

+0

Dopo che l'utente ha toccato Usa, prendo il selettore '- (void) imagePickerController: (UIImagePickerController *) didFinishPickingMediaWithInfo: (NSDictionary *) chiama il delegato. Con quel metodo ottengo l'immagine che mi interessa da 'info' e la passiamo a' myviewcontroller'. Quindi chiamo '[picker presentViewController: myViewController animato: SÌ completamento: nil;' Quindi, quando ignoro myViewController chiamando '[myviewController.presentingViewController dismissViewControllerAnimated: SÌ completamento: nil]' mostra solo uno schermo nero e non consente faccio un'altra foto. – Liron

risposta

6

Sull'iPad quando si utilizzano fonti diverse dal feed della telecamera, si presenta UIImagePickerController in un popover e si può utilizzare per tutto il tempo che si desidera. Ma quando si decide di prendere il UIImagePickerControllerSourceTypeCamera la finestra selettore fonte sta presentando schermo intero e si dispone di due casi:

  1. Se si utilizzano i controlli personalizzati (showsCameraControls = NO) si può prendere tanto immagini che vuoi con lo stesso controller.
  2. Se si utilizzano i controlli predefiniti (mostraCameraControls = SÌ), dopo l' in UN'IMMAGINE è necessario dissmissare il controller perché è inutilizzabile di nuovo e immagino che questo sia il tuo caso. Stai mettendo il controller successivo sulla pila dopo aver scattato la foto, dopo di che stai cercando di tornare al tuo controller di selezione ma è inutilizzabile e puoi vedere lo schermo nero.

documentazione Apple per imagePickerController:didFinishPickingMediaWithInfo::

Se si imposta la proprietà showsCameraControls del selettore immagine da NO e forniscono i propri controlli personalizzati, si può prendere più immagini prima di respingere l'immagine interfaccia selettore. Tuttavia, se si imposta la proprietà su SÌ, il delegato deve ignorare l'interfaccia di selezione immagine dopo che l'utente ha scattato una foto o annulla l'operazione.

Se si desidera scattare un'altra immagine in questo caso, è necessario tornare al controller di base e creare di nuovo l'istanza UIImagePickerController.

Spero che questo possa essere d'aiuto.

Modifica: Il modo più semplice per ricostruire lo stack di controller di visualizzazione IMO è ignorare il selettore dopo aver scattato una foto senza animazione e successivamente mostrare il controller successivo con animazione. Darà all'utente la sensazione che il prossimo controller venga visualizzato subito dopo il controller picker senza "lampeggiare".

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [self dismissViewControllerAnimated:NO completion:^{ 
     [self presentViewController:<newController> animated:YES completion:nil]; 
    }]; 
} 
1

Puoi provare a respingere normalmente UIImagePicker, e quando il controllore di visualizzazione pre-viwer attiva viewWillDesapear, "dici" al viewController precedente che quando visualizzaWillAppear, mostra nuovamente UIImagePicker. Penso che funzioni.

+0

Questo è quello che sto facendo attualmente, in pratica. Lo sto visualizzando in viewDidAppear (non penso che abbia funzionato per mostrarlo in viewWillAppear). Il problema è che quando lo fai, vedi un flash del precedente controller della vista prima che la vista della telecamera ritorni di nuovo. – Liron

1

Ho avuto un problema simile in un'app. Alla fine ho presentato il selettore di immagini per la fotocamera in un controller popover piuttosto che modally per iPad. Non sono sicuro che funzioni per la tua app, ma si tratta di un approccio diverso. Non ho avuto problemi a farlo in questo modo e mi è piaciuto molto meglio.

+0

Sì, forse lo farò. Ciò creerebbe almeno una certa simmetria tra l'utente che sceglie una foto dal suo rullino fotografico e scatta una nuova foto. Non il flusso che volevo davvero, ma forse dovrò farlo. – Liron