Pregunta

Estoy tratando de usar la interfaz UIImagePickerController del sistema operativo 3.1, con cameraOverlayView y takePicture, pero claramente no he podido entender cómo funciona esto, por lo que no obtengo el comportamiento que quiero.

Lo que quiero hacer es abrir la cámara y tomar una foto automáticamente sin tener que hacer que el usuario interactúe con el selector o edite la imagen. Entonces, subclase UIImagePickerController (similar al ejemplo en http: / /github.com/pmark/Helpful-iPhone-Utilities/tree/master/BTL%20Utilities/ ) y apague todos los controles:

- (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];
}

En el overlayView, he logrado forzar el método takePicture de UIImagePickerController para disparar (lo sé, porque puedo NSLog, y escucho el sonido de la cámara tomando una foto). El overlayView se muestra muy bien. Sin embargo, el método delegado didFinishPickingMediaWithInfo: nunca se llama, y ??tampoco se llama a imagePickerControllerDidCancel.

Entonces, ¿cómo obtengo los métodos de delegado para llamarlos o guardo la imagen anulando el método takePicture? (No tengo idea de cómo capturar los datos de la imagen aquí, y Google parece haberme fallado). No puedo evitar sentir que no he entendido cómo funcionan las entrañas de UIImagePickerController, pero los documentos no son demasiado útiles:

por ejemplo:

" Puede proporcionar una vista de superposición personalizada para mostrar una interfaz de toma de imágenes personalizada y puede iniciar la toma de imágenes desde su código. Su vista de superposición personalizada se puede mostrar además de, o en lugar de, los controles predeterminados proporcionados por la interfaz del selector de imágenes. & Quot;

o de showCameraControls:

" Si establece esta propiedad en NO y proporciona sus propios controles personalizados, puede tomar varias fotos antes de cerrar la interfaz del selector de imágenes. " - ¿Cómo descarto la interfaz del selector?

Nota: el delegado está configurado correctamente en IB, por lo que ese no es el problema.

¡Gracias por cualquier ayuda que pueda brindar!

¿Fue útil?

Solución

He descubierto que solo tienes que esperar " el tiempo suficiente " antes de llamar a takePicture , o simplemente falla en silencio. No tengo una buena respuesta sobre cómo determinar el valor mínimo de "el tiempo suficiente" eso siempre funcionará, pero si configura un temporizador y espera cinco o diez segundos, debería estar bien. Sería bueno que devolviera algún tipo de "Todavía no estoy listo para tomar una foto, lo siento". error ya sea directamente desde takePicture o a través del delegado, pero que yo sepa, no lo hace.

Otros consejos

Como una actualización de mi propia pregunta: Resulta que estaba tratando de usar takePicture demasiado pronto. Cuando moví la acción a un botón en la superposición y envié takePicture desde ese botón (una vez que se presentó el selector modalmente), los métodos de delegado se dispararon como deberían. No sé si lo que quería se puede lograr, tomar la imagen sin tener que presionar ese botón, automáticamente, pero si lo es, probablemente tenga que hacerlo enviando takePicture en algún momento después de que intentara usarlo.

- (vacío) imageMethod: (id) remitente { imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

imagePopover=[[UIPopoverController alloc]initWithContentViewController:imagePickerController];
[imagePopover presentPopoverFromRect:importButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top