Pregunta

Seguí un gran tutorial ( http: // iphone. zcentric.com/2008/08/28/using-a-uiimagepickercontroller/ ) sobre el uso de un UIImagePickerController para obtener imágenes del Álbum de fotos o la Cámara en el iPhone. El problema es que el tutorial está un poco anticuado y la documentación cita un método utilizado por el delegado como depreciado desde 3.0. El problema es que la documentación no pudo proporcionar pistas sobre qué usar en el lugar. El método obsoleto es:

– imagePickerController:didFinishPickingImage:editingInfo:

El método anterior se utiliza de la siguiente manera:

- (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingImage:(UIImage*)img editingInfo:(NSDictionary*)editInfo
{

    image.image = img;
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];


}

PREGUNTA: ¿Qué se usa actualmente en lugar del método obsoleto?

¿Fue útil?

Solución

Citando la documentación de Apple:

imagePickerController:didFinishPickingImage:editingInfo:
     

Le dice al delegado que el usuario eligió una imagen. Este método es opcional. ( Desaprobado en iPhone OS 3.0. Usar imagePickerController: didFinishPickingMediaWithInfo: en su lugar .)

Otros consejos

Aquí se explica cómo usar la nueva API del selector de imágenes en pocas palabras.

Primero, necesita una clase declarada así, ya que se configura como el delegado del selector de imágenes:

@interface MyClass : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate> {
UIImagePickerController*    imagePicker;
}
@property(nonatomic,retain) UIImagePickerController* imagePicker;

- (IBAction) takePicture:(id)sender;

@end

El método que muestra el selector de imágenes sería algo como esto. Se declara aquí como IBAction para que pueda conectarlo directamente a un control (como un botón) en Interface Builder. También comprueba que si está en un iPhone, muestra la interfaz de la cámara, pero en un iPod Touch, muestra el selector de galería:

#import <MobileCoreServices/UTCoreTypes.h>
...
@synthesize imagePicker = _imagePicker;
...

- (void) takePicture:(id)sender
{
        if (!_imagePicker) {
            self.imagePicker = [[UIImagePickerController alloc] init];
            self.imagePicker.delegate = self;
        }

        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
            self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
            NSArray* mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
            self.imagePicker.mediaTypes = mediaTypes;
        } else {
            self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
            self.imagePicker.allowsImageEditing = YES; 
        }

    [self presentModalViewController:self.imagePicker animated:YES];
}

Entonces necesita estos dos métodos:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 

    // MediaType can be kUTTypeImage or kUTTypeMovie. If it's a movie then you
    // can get the URL to the actual file itself. This example only looks for images.
    //   
    NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    // NSString* videoUrl = [info objectForKey:UIImagePickerControllerMediaURL];

    // Try getting the edited image first. If it doesn't exist then you get the
    // original image.
    //
    if (CFStringCompare((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) {       
        UIImage* picture = [info objectForKey:UIImagePickerControllerEditedImage];
        if (!picture)
            picture = [info objectForKey:UIImagePickerControllerOriginalImage];     

            // **You can now do something with the picture.
    }
    self.imagePicker = nil;
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 
    self.imagePicker = nil;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top