2011-04-29 8 views
9

Tengo una aplicación que toma una foto y la pone en una vista de imagen. Sencillo. código es el siguiente:¡Toma una foto con iPhone y luego úsala!

- (void)takePhoto:(id)sender 
{ 
    // Lazily allocate image picker controller 
    if (!imagePickerController) { 
     imagePickerController = [[UIImagePickerController alloc] init]; 

     // If our device has a camera, we want to take a picture, otherwise, we just pick from 
     // photo library 
     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
     { 
      [imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera]; 
     }else 
     { 
      [imagePickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
     } 

     // image picker needs a delegate so we can respond to its messages 
     [imagePickerController setDelegate:self]; 
    } 
    // Place image picker on the screen 
    [self presentModalViewController:imagePickerController animated:YES]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

    image = [ImageHelpers imageWithImage:image scaledToSize:CGSizeMake(480, 640)]; 

    [imageView setImage:image]; 

    [self dismissModalViewControllerAnimated:YES]; 
} 

Cuando uso la cámara de rollo todo funciona muy bien, pero si uso la cámara real de la vista de la imagen es sólo negro. ¿Porqué es eso?

¿Debo guardarlo en el rollo de la cámara antes de usarlo en la vista de imagen?

+0

Establecer un punto de interrupción para comprobar si la imagen es nulo cuando se pasó a ImageHelpers – edo42

+0

No parece no ser nulo. Puedo guardar la foto en el rollo de la cámara usando: UIImageWriteToSavedPhotosAlbum() para que la imagen exista en la variable. Parece perderse cuando lo asigno a la imageView. – Linus

+0

Supongo que tengo que guardarlo en algún lugar antes de enviarlo a mi vista. ¿Cuál sería el mejor enfoque aquí? – Linus

Respuesta

6

Ok. Encontré la solución yo mismo.

tuve que despedir a la vista modal primera ...

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

    [self dismissModalViewControllerAnimated:YES]; //Do this first!! 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

    image = [ImageHelpers imageWithImage:image scaledToSize:CGSizeMake(480, 640)]; 

    [imageView setImage:image]; 
} 
1

¿Por qué no puedes usar ese código?

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
{ 
    [imageView setImage:image]; 
    [picker dismissModalViewControllerAnimated:YES]; 
    [picker release]; 
} 
+1

Bueno, estaba en desuso en iOS 3 ... http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImagePickerControllerDelegate_Protocol/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/intfm/UIImagePickerControllerDelegate/imagePickerController: didFinishPickingImage: editingInfo: – Linus

+0

XCode nunca me advirtió ... – edo42

+0

Ok. Todavía no quiero usar una función obsoleta;) – Linus

Cuestiones relacionadas