He creado un UIImagePicker/vista de cámara, con una barra de herramientas y un botón personalizado para tomar una instantánea. Realmente no puedo cambiar a usar el modo predeterminado debido al botón personalizado, y estoy dibujando en la parte superior de la vista.Obligar a un UIView a volver a dibujar inmediatamente, en lugar de durante el siguiente ciclo de ejecución
Al presionar el botón, quiero hacer una captura de pantalla con UIGetScreenImage(); Sin embargo, la barra de herramientas está apareciendo en la imagen, incluso si lo escondo en primer lugar:
//hide the toolbar
self.toolbar.hidden = YES;
// capture the screen pixels
CGImageRef screenCap = UIGetScreenImage();
Estoy bastante seguro de que esto se debe a que a pesar de que la barra de herramientas está oculta, que se vuelve a dibujar una vez que devuelve la función y entramos el siguiente ciclo de ejecución: después de llamar a UIGetScreenImage.
He intentado hacer la siguiente adición, pero no sirvió de nada:
//hide the toolbar
self.toolbar.hidden = YES;
[self.toolbar drawRect:CGRectMake(0, 0, 320, 52)];
// capture the screen pixels
CGImageRef screenCap = UIGetScreenImage();
También he intentado usar setNeedsDisplay, pero eso no funciona bien porque una vez más el sorteo pasa después de las actuales devuelve la función.
¿Alguna sugerencia? ¡Gracias!
Esto solo no lo hizo, pero una pequeña adición lo hizo funcionar. Llamé al selector de captura de pantalla con [self performSelector: @selector (captureScreen) withObject: nil afterDelay: 0]; y eso hizo el trabajo. Gracias por el liderazgo! –
[self performSelector: @selector (captureScreen) withObject: nil afterDelay: 0]; en realidad hace que "captureScreen" se ejecute en el siguiente ciclo de ejecución. –