Descargué la demo de AVCam desde el sitio de Apple y traté de agregar una simple pantalla de inicio (agregué un StartViewController. {H, m, nib}) con un button que luego lanzaría la demostración de AVCam. El código del button es el siguiente (todo lo demás es solo el material pnetworkingeterminado creado por xcode):
-(IBAction) btnClicked:(id) sender { viewController = [[AVCamViewController alloc] initWithNibName: @"AVCamViewController" bundle:nil]; [UIView beginAnimations:@"flipping view" context:nil]; [UIView setAnimationDuration:1]; [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES]; [self.view addSubview:viewController.view]; [UIView commitAnimations]; }
De alguna manera después de agregar esta punta, tomar una foto no funciona todo el time (a veces ninguna image termina en el rollo de la camera). Agregué algunas declaraciones de logging para capturar StillImage en captureStillImageAsynchronouslyFromConnection: stillImageConnection completionHandler y noté que este completingHandler no siempre se llama. Lo extraño es que funciona un poco del time. ¿Mi conjetura es que estoy haciendo algo mal pero no estoy seguro de qué? Estoy probando esto en un iPhone con 4.2.1.
Asegúrese de que AVCaptureSession
esté ejecutando cuando llame a captureStillImageAsynchronouslyFromConnection:stillImageConnection
Bueno, yo estaba enfrentando un problema similar en el que, mediante la captureStillImageAsynchronouslyFromConnection:stillImageConnection
estaba generando una exception de que la connection
pasada no es válida. Más tarde, me di count de que cuando hice las properties
para la session y stillImageOutPut
para retener valores, el problema se resolvió.
Para mí, este problema SOLO sucedió en un solo núcleo iPhone 4 y cuando trato de capturar imágenes fijas con AVCaptureSessionPresetHigh.
Probé AVCaptureSessionPresetPhoto y este problema desapareció. Pero no necesito fotos a tamaño completo, así que busqué otra solución.
Pongo captureStillImageAsynchronouslyFromConnection en la queue principal. Algo como esto
dispatch_async(sessionQueue) { // do whatever before capturing dispatch_async(dispatch_get_main_queue) { captureStillImageAsynchronouslyFromConnection { // do whatever after capturing } } }
No estoy seguro de por qué existe este problema y no estoy seguro de por qué esto puede evitarlo. Pero espero que esto pueda ayudar a alguien.