2

J'ai toujours ce problème avec uiimagepickercontroller. C'est censé être simple, mais je n'arrive toujours pas à le comprendre. Ou peut-être que je vais dans la mauvaise direction.UIImagePickerController allowEditing = YES Problème

J'appelle l'imagepicker pour que l'utilisateur puisse charger une photo à partir d'un rouleau de photo/album photo/prendre une photo de l'appareil photo. Cette partie est bien.

Cela devient bizarre quand je mets allowEditing à YES. Le délégué didiFinishPickingMediaWithInfo renvoie une info NSDictionary * avec à la fois l'image editing et l'image originalImage, même si l'utilisateur n'a PAS recadré l'image affichée dans le sélecteur. Donc, le problème est de savoir comment puis-je détecter si l'utilisateur recadré l'image ou non? Ce dont j'ai besoin pour mon application est que l'utilisateur est autorisé à recadrer l'image s'il le souhaite, mais il a également le choix de ne pas recadrer, retournant ainsi la photo originale. Actuellement, j'utilise un segmentedcontrol pour que l'utilisateur présélectionne avant de charger une photo, ce qui, à mon avis, est assez gênant. Et peut-être que certains utilisateurs ne le comprennent pas. Alors, comment puis-je implémenter ce dont j'ai besoin sans trop déranger l'utilisateur?

Répondre

3

Je suis sûr que vous devez éditer l'image si les contrôles d'édition sont affichés. Je ne connais aucun moyen de se débarrasser du carré.

Cependant, si je me trompe que vous pouvez comparer leur taille:

editedImage = [info objectForKey:UIImagePickerControllerEditedImage]; 
originalImage = [info objectForKey:UIImagePickerControllerOriginalImage]; 

if ((editedImage.size.width != originalImage.size.width) || (editedImage.size.height != originalImage.size.height)) { 
    // The image has been edited 
} 
+0

Salut Matthew, merci pour votre réponse. Quoi qu'il en soit, je pense que si je fais ça, ce sera toujours VRAI. Parce que, par exemple, dire Im chargement d'une photo portrait, lors de la configuration permetEditing = YES, alors le carré de recadrage est déjà là, ainsi éditéImage retournera toujours ce qui est dans ce carré, même si l'utilisateur ne l'a pas recadré. J'ai pensé à un moyen de contourner cela en demandant peut-être à l'utilisateur s'il veut recadrer la photo ou non, et présenter le sélecteur en fonction de cette entrée. Im hors d'autres idées. – GeneCode

+0

Vous pouvez demander par la suite puisque vous avez les deux images, mais le carré d'édition est susceptible de flipper certaines personnes. Je pense que j'utiliserais deux boutons différents comme "Prenez une photo" et "Prenez et modifiez une photo" au lieu du contrôle segmenté, si vous avez de la place. L'utilisateur est garanti de remarquer et de choisir intentionnellement celui qu'il veut. –

+0

Du point de vue de l'utilisateur, si l'application demande une récolte par la suite, ce serait comme demander deux fois à l'utilisateur. Je pense que cela pourrait dérouter l'utilisateur. Votre idée de prendre une photo et prendre et modifier une photo est ok. Mais pour le moment je présente une ACtionSheet pour demander à l'utilisateur s'il veut ou non recadrer la photo avant de présenter le UIImagePicker/Camera. C'est parce que j'ai déjà 3 boutons (charger à partir de la pellicule, des albums photo et prendre une caméra). En tout cas merci pour vos réponses j'apprécie vos pensées. – GeneCode

-1

Il suffit d'utiliser ce .. il retournera automatiquement l'image appropriée, recadrée ou uncropped ... et vous avez encore tous l'info juste incase :)

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)info 
{