Question

J'ai suivi un excellent didacticiel ( http: // iphone. zcentric.com/2008/08/28/using-a-uiimagepickercontroller/ ) lors de l'utilisation d'un UIImagePickerController pour obtenir des images de l'album photo ou de l'appareil photo sur l'iPhone. Le problème est que le didacticiel est un peu obsolète et que la documentation cite une méthode utilisée par le délégué comme étant dépréciée depuis la version 3.0. Le problème est que la documentation n'a pas fourni d'indices sur ce qu'il faut utiliser sur place. La méthode obsolète est la suivante:

– imagePickerController:didFinishPickingImage:editingInfo:

La méthode ci-dessus est utilisée comme suit:

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

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


}

QUESTION: Qu'est-ce qui est actuellement utilisé à la place de la méthode obsolète?

Était-ce utile?

La solution

Citation de la documentation Apple:

imagePickerController:didFinishPickingImage:editingInfo:
     

Indique au délégué que l'utilisateur a sélectionné une image. Cette méthode est optionnelle. ( Déconseillé dans iPhone OS 3.0. Utilisez imagePickerController: didFinishPickingMediaWithInfo: à la place .)

Autres conseils

Voici comment utiliser la nouvelle API de sélecteur d’images en un mot.

Tout d'abord, vous avez besoin d'une classe déclarée comme ceci car elle se définit comme délégué de sélecteur d'images:

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

- (IBAction) takePicture:(id)sender;

@end

La méthode permettant d’afficher le sélecteur d’images irait dans ce sens. Il est déclaré ici comme un IBAction afin que vous puissiez le connecter directement à un contrôle (comme un bouton) dans Interface Builder. Il vérifie également que, si vous êtes sur un iPhone, il affiche l'interface de l'appareil photo, mais sur un iPod Touch, le sélecteur de galerie:

#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];
}

Ensuite, vous avez besoin de ces deux méthodes:

- (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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top