Domanda

Sto cercando di utilizzare l'interfaccia UIImagePickerController da OS 3.1, con cameraOverlayView e takePicture, ma chiaramente non sono riuscito a capire come funziona e quindi non ottengo il comportamento che desidero.

Quello che voglio fare è aprire la fotocamera e scattare una foto automaticamente senza che l'utente debba interagire con il selettore o modificare l'immagine. Quindi sottocludo UIImagePickerController (simile all'esempio in http: / /github.com/pmark/Helpful-iPhone-Utilities/tree/master/BTL%20Utilities/ ) e disattiva tutti i controlli:

- (void)displayModalWithController:(UIViewController*)controller animated:(BOOL)animated {
self.sourceType = UIImagePickerControllerSourceTypeCamera;
self.showsCameraControls = NO;
self.navigationBarHidden = YES;
self.toolbarHidden = YES;
    // Setting the overlay view up programmatically.
ipView = [[ImagePickerView alloc] init];
self.cameraOverlayView = ipView;
[controller presentModalViewController:self animated:NO];
}

In overlayView, sono riuscito a forzare il metodo takePicture di UIImagePickerController (lo so, perché posso farlo NSLog e sento il suono della fotocamera che scatta una foto). OverlayView appare bene. Tuttavia, il metodo delegato didFinishPickingMediaWithInfo: non viene mai chiamato e neanche imagePickerControllerDidCancel viene chiamato.

Quindi, come posso ottenere i metodi delegato per essere chiamato o salvare l'immagine sostituendo il metodo takePicture? (Non ho idea di come catturare i dati dell'immagine qui, e Google sembra avermi fallito). Non posso fare a meno di non riuscire a capire come funziona il fegato di UIImagePickerController, ma i documenti non sono eccessivamente utili:

per esempio:.

" Puoi fornire una visualizzazione overlay personalizzata per visualizzare un'interfaccia personalizzata per scattare foto e puoi iniziare a scattare foto dal tuo codice. La visualizzazione overlay personalizzata può essere visualizzata in aggiunta o al posto dei controlli predefiniti forniti dall'interfaccia di selezione delle immagini. & Quot;

o da showCameraControls:

" Se imposti questa proprietà su NO e fornisci i tuoi controlli personalizzati, puoi scattare più foto prima di chiudere l'interfaccia di selezione delle immagini. " - Come posso chiudere l'interfaccia di selezione?

Nota: il delegato è impostato correttamente in IB, quindi non è questo il problema.

Grazie per l'aiuto che puoi fornire!

È stato utile?

Soluzione

Ho scoperto che devi solo attendere " abbastanza a lungo " prima di chiamare takePicture , oppure fallisce silenziosamente. Non ho una buona risposta su come determinare il valore minimo di "abbastanza lungo" funzionerà sempre, ma se imposti un timer e attendi cinque o dieci secondi dovresti andare bene. Sarebbe bello se restituisse una sorta di "non sono ancora pronto a fare una foto, scusa" errore direttamente da takePicture o tramite il delegato, ma per quanto ne so non lo è.

Altri suggerimenti

Come aggiornamento alla mia domanda: ho scoperto che stavo cercando di usare takePicture troppo presto. Quando ho spostato l'azione su un pulsante sull'overlay e ho inviato takePicture da quel pulsante (una volta che il selettore veniva presentato in modo modale), i metodi delegati venivano attivati ??come dovrebbero. Non so se ciò che volevo fosse realizzabile - scattare l'immagine senza dover premere automaticamente quel pulsante - ma se lo è, probabilmente dovrà essere fatto inviando takePicture qualche volta dopo che stavo cercando di usarlo.

- (void) imageMethod: (id) {sender imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

imagePopover=[[UIPopoverController alloc]initWithContentViewController:imagePickerController];
[imagePopover presentPopoverFromRect:importButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top