2011-01-16 12 views
8

Para el UIImagePickerController, me abrió laUIImagePickerController'sFinishPickingMediaWithInfo es demasiado lento, ¿puedo agregar progressHUD/indicator?

picker.allowsEditing = YES; 

modo que el usuario puede mover y escalar la foto, después de la captura o la selección del álbum. Una vez que se hace clic en el "elegir" o "utilización", toda la aplicación se congela durante más de 5 segundos, y luego regresa con las fotos, a través

- (void)imagePickerController:(UIImagePickerController*)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 

He intentado añadir un indicador de esta función delegada, pero no aparece ... Supongo que la larga demora ocurre antes de esta devolución de llamada, y es probablemente debido a la "edición" de ful

¿Hay alguna manera posible de manejar esto? Solo deseo brindarles a los usuarios una buena experiencia. :)

¡Muchas gracias!

Respuesta

6

Debe realizar esto en otro hilo y con un NSAutoreleasePool, así:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
    [self.navigationController dismissModalViewControllerAnimated:YES]; 
    [NSThread detachNewThreadSelector:@selector(uploadImage:) toTarget:self withObject:image]; 
} 

- (void)uploadImage:(UIImage *)image { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    // Handle chosen photo 
    [pool release]; 
} 
+0

Muchas gracias, pero como lo intenté, nada cambió ... aún un retraso después de hacer clic en "elegir" .... – Dobby

+0

¿Estás haciendo algo con la imagen, o en el bloque de código didFinishPickingImage? Todo debe hacerse dentro de NSAutorelease Pool y [pool release] .. –

+0

Estimado Kolin, todo se hace dentro de la función uploadImage ... mis códigos siguieron exactamente los tuyos :) – Dobby

0

¿Estás llamando la UIImagePicker desde el hilo principal?

Este código debe invocarse desde allí. Cada vez que tengo esta demora exacta de 5 segundos en cualquier cosa relacionada con la interfaz de usuario, es porque el código está siendo llamado desde otra secuencia, en lugar de la principal.

Cuestiones relacionadas