una samsung pantalla hacer cómo como celular captura objective-c ios8 uiimagepickercontroller

objective c - samsung - iOS 8 Hacer una instantánea de una vista que no se ha procesado da como resultado una instantánea vacía



cómo hacer una captura de pantalla en iphone 5 (20)

Estoy bastante seguro de que esto es solo un error en iOS 8.0. Es reproducible con la más simple de las aplicaciones POC que no hace más que intentar presentar un UIImagePickerController como lo hace anteriormente. Además, que yo sepa, no hay un patrón alternativo para mostrar el selector de imágenes / cámara. Incluso puedes descargar la aplicación de ejemplo UIImagePickerController de Apple, ejecutarla y generará el mismo error al instante .

Dicho esto, la funcionalidad aún funciona para mí. Además de la advertencia / error, ¿tiene problemas con el funcionamiento de su aplicación?

En iOS 8 estoy teniendo problemas para capturar imágenes desde la cámara hasta ahora estoy usando este código para

UIImagePickerController *controller=[[UIImagePickerController alloc] init]; controller.videoQuality=UIImagePickerControllerQualityTypeMedium; controller.delegate=(id)self; controller.sourceType=UIImagePickerControllerSourceTypeCamera; [self presentViewController:controller animated:YES completion:nil];

Pero en iOS 8 estoy obteniendo esto:

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

He intentado con la solución proporcionada por este post con

@property (strong,nonatomic)UIImagePickerController *controller; _controller=[[UIImagePickerController alloc] init]; _controller.videoQuality=UIImagePickerControllerQualityTypeMedium; _controller.delegate=(id)self; _controller.sourceType=UIImagePickerControllerSourceTypeCamera; _[self presentViewController:controller animated:YES completion:nil];

y esto

... controller.modalPresentationStyle=UIModalPresentationFullScreen; or controller.modalPresentationStyle=UIModalPresentationCurrentContext; ...

y esto

double delayInSeconds = 0.1; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [self presentViewController:controller animated:YES completion:nil]; });

y esto

[self presentViewController:controller animated:YES completion:NULL];

y esto

[self presentViewController:controller animated:YES completion:^{ }];

¿alguna idea?


También encuentro el mismo problema y lo resolví comprobando si la cámara está disponible:

BOOL cameraAvailableFlag = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; if (cameraAvailableFlag) [self performSelector:@selector(showcamera) withObject:nil afterDelay:0.3];


Estuve luchando con este problema durante varias horas, leí todos los temas relevantes y descubrí que el error se produjo porque, según la configuración de privacidad de mi dispositivo, el acceso de la cámara a mi aplicación estaba bloqueado. Nunca he denegado el acceso a la cámara y no sé cómo se bloqueó, pero ese era el problema.


Encontré el mismo problema e intenté todo. Tengo dos aplicaciones diferentes, una en objetivo C y otra en rápido, ambas tienen el mismo problema. El mensaje de error viene en el depurador y la pantalla se pone negra después de la primera foto. Esto solo ocurre en iOS> = 8.0, obviamente es un error.

Encontré una solución difícil. Apague los controles de la cámara con imagePicker.showsCameraControls = false y cree su propia superposición View que tiene los botones que faltan. Hay varios tutoriales sobre cómo hacer esto. El extraño mensaje de error permanece, pero al menos la pantalla no se pone negra y tienes una aplicación en funcionamiento.


Me encontré con esto después de llamar a UIImagePickerController presentViewController: de la devolución de llamada a un delegado de UIAlertView. Resolví el problema presionando el presente ViewController: call off el rastro de ejecución actual usando dispatch_async.

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { dispatch_async(dispatch_get_main_queue(), ^{ UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.delegate = self; if (buttonIndex == 1) imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; else imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; [self presentViewController: imagePickerController animated: YES completion: nil]; }); }


Me encontré con este problema. Cuando llamamos a la cámara y lanzamos las vistas producidas este problema. Por ejemplo, llame a una cámara y configure view nil en el método viewDidDisappear, este error vendrá ya que no hay una devolución de llamada para el evento de la cámara. Asegúrese también de este caso para este error.


Para cualquiera que esté viendo un problema con una vista previa en negro después de capturar la imagen, ocultar la barra de estado después de que se muestre UIPickerController parece solucionar el problema.

UIImagePickerControllerSourceType source = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum; UIImagePickerController *cameraController = [[UIImagePickerController alloc] init]; cameraController.delegate = self; cameraController.sourceType = source; cameraController.allowsEditing = YES; [self presentViewController:cameraController animated:YES completion:^{ //iOS 8 bug. the status bar will sometimes not be hidden after the camera is displayed, which causes the preview after an image is captured to be black if (source == UIImagePickerControllerSourceTypeCamera) { [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; } }];


Tuve este problema al animar algunas vistas y la aplicación entrará en modo de fondo y regresará. Lo manejé estableciendo una bandera isActive. Lo configuré para NO en

- (void)applicationWillResignActive:(UIApplication *)application

y SÍ en

- (void)applicationDidBecomeActive:(UIApplication *)application

y animar o no animar mis puntos de vista en consecuencia. Se hizo cargo del problema.


No tengo suficientes puntos de reputación para comentar la respuesta de @greg anterior, por lo que agregaré mis observaciones aquí. Tengo un proyecto Swift para iPad y iPhone. Tengo un método dentro de mi controlador de vista principal (el bit relevante a continuación). Cuando pruebo esto en un teléfono, todo funciona correctamente y no se generan advertencias. Cuando lo ejecuto en un iPad, todo funciona correctamente, pero veo la advertencia sobre hacer una instantánea de la vista. Lo interesante, sin embargo, es que cuando uso un iPad sin usar el controlador de popover, todo funciona correctamente sin previo aviso. Desafortunadamente, Apple exige que el selector de imágenes se use dentro de un popover en el iPad, si la cámara no se está utilizando.

dispatch_async(dispatch_get_main_queue(), { let imagePicker: UIImagePickerController = UIImagePickerController(); imagePicker.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum; imagePicker.mediaTypes = [kUTTypeImage]; imagePicker.allowsEditing = false; imagePicker.delegate = self; if(UIDevice.currentDevice().userInterfaceIdiom == .Pad){ // on a tablet, the image picker is supposed to be in a popover let popRect: CGRect = buttonRect; let popover: UIPopoverController = UIPopoverController(contentViewController: imagePicker); popover.presentPopoverFromRect(popRect, inView: self.view, permittedArrowDirections: UIPopoverArrowDirection.Up, animated: true); }else{ self.presentViewController(imagePicker, animated: true, completion: nil); } });


Lo intenté todo, mi problema fue que el selector de imágenes de la cámara y la biblioteca de fotos desaparecieron inmediatamente después de que aparecieron. Lo resolví con la siguiente línea (veloz)

imagePicker.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext


Esto podría ser un error del ImagePickerController incorporado. Mi código funciona, pero ocasionalmente se cuelga en el iPhone 6 Plus.

Intenté todas las soluciones sugeridas por otras respuestas, pero no hubo suerte. Problema finalmente resuelto después de cambiar a JPSImagePickerController .


Obtuve el mismo error, recibiendo el mensaje de abajo en la consola al abrir la cámara.

''Hacer una instantánea de una vista que no se ha renderizado da como resultado una instantánea vacía. Asegúrese de que su vista se haya renderizado al menos una vez antes de hacer una instantánea o una instantánea después de las actualizaciones de la pantalla.

Para mí, el problema era con el nombre para mostrar de Bundle en el archivo Info.plist. Estaba vacío, puse el nombre de mi aplicación allí y ahora funciona bien. No recibí ninguna alerta de permiso de cámara debido a que el nombre del paquete está vacío. bloqueó la vista de la representación.

el problema no estaba a la vista sino que lo presentaba sin permiso. Puedes verificarlo en la configuración -> privacidad -> Cámara, si tu aplicación no aparece en la lista, el problema puede ser el mismo.


Estoy usando Phonegap, pero este hilo sigue siendo el primero al buscar en Google el mensaje de error.

Para mí, este problema desapareció al definir el tipo de imagen en PNG.

encodingType : Camera.EncodingType.PNG

Entonces toda la línea es:

navigator.camera.getPicture(successFunction, failFunction, { encodingType : Camera.EncodingType.PNG, correctOrientation:true, sourceType : Camera.PictureSourceType .PHOTOLIBRARY, quality: 70, allowEdit : false , destinationType: Camera.DestinationType.DATA_URL});

Su millaje puede variar, pero eso fue lo que hizo.


Tuve esto con una UIAlertControllerStyleActionSheet que le da al usuario la opción de tomar una foto con la cámara o usar una de la biblioteca.

Probé un punto de corte simbólico en el mensaje de error

Eso me mostró que el error es producido por el uso interno de UICollectionView durante la presentación

[self presentViewController:alert animated:YES completion:nil];

Lo arreglé exponiendo explícitamente el marco antes de presentar

[alert setPreferredContentSize: alert.view.frame.size];

Aquí está el método completo que funciona sin el error

-(void)showImageSourceAlertFromSender:(id)sender{ UIButton *senderButton = (UIButton*)sender; UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *cameraAction = [UIAlertAction actionWithTitle:@"Camera" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self takePhoto]; }]; UIAlertAction *libraryAction = [UIAlertAction actionWithTitle:@"Library" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self selectPhotoFromLibraryFromSender:sender]; }]; [alert addAction:cameraAction]; [alert addAction:libraryAction]; alert.popoverPresentationController.delegate = self; alert.popoverPresentationController.sourceRect = senderButton.frame; alert.popoverPresentationController.sourceView = self.view; [alert setPreferredContentSize: alert.view.frame.size]; [self presentViewController:alert animated:YES completion:^(){ }];}


Puede silenciar la advertencia "Hacer una instantánea de una vista" haciendo referencia a la propiedad de view antes de presentar el controlador de vista. Al hacerlo, la vista se carga y permite que iOS la presente antes de tomar la instantánea.

UIAlertController *controller = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; controller.modalPresentationStyle = UIModalPresentationPopover; controller.popoverPresentationController.barButtonItem = (UIBarButtonItem *)sender; ... setup the UIAlertController ... [controller view]; // <--- Add to silence the warning. [self presentViewController:controller animated:YES completion:nil];


Estoy bastante seguro de que esto es solo un error en iOS 8.0. Es reproducible con la más simple de las aplicaciones POC que no hace más que intentar presentar un UIImagePickerController como lo hace anteriormente. Además, que yo sepa, no hay un patrón alternativo para mostrar el selector de imágenes / cámara. Incluso puedes descargar la aplicación de ejemplo UIImagePickerController de Apple, ejecutarla y generará el mismo error al instante.

Dicho esto, la funcionalidad aún funciona para mí. Además de la advertencia / error, ¿tiene problemas con el funcionamiento de su aplicación?


En mi caso (XCode 7 e iOS 9), utilizo UINavigationController "oculto", así que UINavigationControllerDelegate agregar UINavigationControllerDelegate para presentar la cámara o rollo y ¡funciona como debería! And pickerControllerDelegate.self no muestra ningún error!


Llamar a este método funcionó para mí. Colócalo después de presentar tu vista.

[yourViewBeingPresented.view layoutIfNeeded];


Si estamos utilizando el UIImagePickerController como una propiedad, esta advertencia desaparecerá. xcode supone que no estamos utilizando el resultado del UIImagePickerController , si estamos instanciando el UIImagePickerController dentro de una función.


Alternativamente, considere usar drawViewHierarchyInRect :

Rápido:

extension UIImage{ class func renderUIViewToImage(viewToBeRendered: UIView) -> UIImage { UIGraphicsBeginImageContextWithOptions(viewToBeRendered.bounds.size, true, 0.0) viewToBeRendered.drawViewHierarchyInRect(viewToBeRendered.bounds, afterScreenUpdates: true) viewToBeRendered.layer.renderInContext(UIGraphicsGetCurrentContext()!) let finalImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return finalImage } }

C objetivo:

- (UIImage *)snapshot:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0); [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }

Ver también: