Ce que je veux faire, c'est utiliser toujours la même instance de UIImagePickerController dans toute mon application, puisque je ne veux pas allouer et détruire mon sélecteur à chaque fois que l'utilisateur prend une photo. L'application utilise un sélecteur et un UIImageView nommé pictureA pour afficher la photo choisie dans l'album de l'iPhone ou prise avec l'appareil photo.
Au départ, j'ai bloqué mon contrôleur de vue picker comme ceci :
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
[self addSubview:imagePickerController.view];
Lorsque je prends une image dans le sélecteur et que je la place dans mon UIImageView :
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
// newImage is a UIImage do not try to use a UIImageView
UIImage *newImage = [info objectForKey:@"UIImagePickerControllerEditedImage"];
[pictureA removeFromSuperview];
CGRect myImageRect = CGRectMake(30.0f, 38.0f, 125.0f, 125.0f);
pictureA = [[UIImageView alloc] initWithFrame:myImageRect];
pictureA.contentMode= UIViewContentModeScaleAspectFit;
[pictureA setImage:newImage];
pictureA.opaque = YES;
[self addSubview:pictureA];
[newImage release];
[picker dismissModalViewControllerAnimated:YES];
[picker.view setHidden:YES];
}
Il choisit une image dans la bibliothèque de l'iPhone :
- (void) chooseImageFromLibrary {
[imagePickerController.view setHidden:NO];
imagePickerController.allowsEditing = YES;
[imagePickerController viewWillAppear:YES];
[imagePickerController viewDidAppear:YES];
}
Annuler :
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
[picker.view setHidden:YES];
}
- (void) takePicture {
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
[(MainScene*)[melonGame actualScene] setCameraDissabled:YES];
return;
}
[imagePickerController.view setHidden:NO];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.allowsEditing = YES;
[imagePickerController takePicture];
[imagePickerController viewWillAppear:YES];
[imagePickerController viewDidAppear:YES];
}
L'application fonctionne correctement lorsque je prends la première photo, mais lorsque j'essaie de prendre une autre photo ou de choisir une autre photo dans ma bibliothèque, elle ressemble exactement à la dernière fois que j'ai sélectionné une photo (avec la photo dans tout l'écran et un menu inactif pour choisir et annuler en bas de l'écran). Mon application ne fonctionne correctement que si je retire le contrôleur de ma vue et que je l'alloue à chaque fois que l'utilisateur prend une photo. Est-ce qu'il y a un moyen de "nettoyer" ou de "redémarrer" le sélecteur sans le libérer et le retirer de ma vue ?
Je ne suis pas sûr non plus de pouvoir instance une fois l'UIImageView ( pictureA) où je stocke l'image prise par l'imagePickerController et de la modifier à chaque fois que l'utilisateur prend une photo ou en choisit une dans l'album, je soupçonne qu'il est incorrect de la détruire et de la réallouer à chaque fois que l'utilisateur prend une photo. Des suggestions, des erreurs dans la gestion de la mémoire ou dans l'utilisation de UIImagePickerController et de UIImageView ?
merci !