2014-06-10 5 views
10

Nach dem Lesen der Dokumentation und sample code from apple in Bezug auf die UIImagePickerController und nach dem Lesen vieler Tutorials und sogar Questions hier bei Stackoverflow (or here), kam ich zu dem Schluss, dass der eingebaute UIImagePicker in der Lage ist, ein "Crop-Fenster" für den Benutzer zu präsentieren und lassen Sie den Benutzer den rechten Teil des Bildes, das er verwenden möchte, zuschneiden und verschieben.UIImagePickerController + Cropping: was erlaubt Editing und was nicht?

Wenn Sie sich diese Beispiele auf iOS 7.1 anschauen, erscheint kein Zuschneidefenster. Es erscheint nichts, was den Benutzer einen Teil des aufgenommenen Bildes ausschneiden lässt. Alle Tests erfolgten auf echter Hardware (iPhone 5S), hier wurde kein iPhone-Simulator wegen fehlender Kamera verwendet;)

Auch bei der Delegate-Methode "didFinishPickingMediaWithInfo" gibt es keinen Eintrag von "UIImagePickerControllerEditedImage" in der "info" - NSDictionary.

Was ich tat:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 

#if TARGET_IPHONE_SIMULATOR 
    // iPhone-Simulator has no camera, just save images to the photoalbum on the simulator to use them here 
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
#else 
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
#endif 

    imagePickerController.editing = YES; 
    imagePickerController.delegate = (id)self; 
    imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 


    [self presentModalViewController:imagePickerController animated:YES]; 

und die delegierte Methode:

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

An dieser Stelle sind nur 3 Schlüssel im Dictionary mit dem Namen "Info" zur Verfügung:

  • UIImagePickerControllerOriginalBild
  • UIImagePickerControll erMediaMetadata
  • UIImagePickerControllerMediaType

nichts anderes. Außerdem wurden kein Zuschneidefenster oder ähnliche Steuerelemente angezeigt.

Bin ich falsch mit meiner Erwartung über das Verhalten des ImagePicker? Bei dieser SF-Frage hat der Benutzer "Crop window comes up" geschrieben. Wurde das Feature entfernt? Ist die Dokumentation veraltet oder bin ich hier völlig falsch?

Ich habe auch versucht, diesen Code aus einer anderen answer to a similar question genommen:

- (void) imagePickerController:(UIImagePickerController *)picker 
    didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [picker dismissViewControllerAnimated:YES completion:^{ 
      // Edited image works great (if you allowed editing) 
     UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; 
      // AND the original image works great 
     UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage]; 
      // AND do whatever you want with it, (NSDictionary *)info is fine now 
     UIImage *myImage = [info objectForKey:UIImagePickerControllerEditedImage]; 
    }]; 
} 

Kein Zuschneiden Fenster, die Taste "UIImagePickerControllerEditedImage" ist nicht an der Info-NSDictionary erscheint.

Kann mir jemand das richtige Verhalten erklären? Vielen Dank im Voraus.

Antwort

3

dieses ist funktioniert bei mir:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *originalImage, *editedImage; 

    editedImage = (UIImage *) [info objectForKey:UIImagePickerControllerEditedImage]; 
    originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage]; 

    if (editedImage) 
     self.profilePictureImageView.image = editedImage; 
    else 
     self.profilePictureImageView.image = originalImage; 

    [picker dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

Es hat den gleichen Effekt wie bereits in meiner Frage beschrieben: kein Zuschneiden Fenster erscheint. Alles, was ich tun kann, ist das Foto aufzunehmen oder zu wiederholen. – itinance

0

Zunächst sollten Sie die folgenden Header-Datei importieren (Sie müssen den MobileCoreServices Rahmen zu einem Projekt importieren):

#import <MobileCoreServices/UTCoreTypes.h> 

Dann versuchen Sie die folgenden Code

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 

#if TARGET_IPHONE_SIMULATOR 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]){ 
     imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    } 
#else 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ 
     imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    } 
#endif 

    imagePicker.mediaTypes = @[(NSString *)kUTTypeImage]; 
    imagePicker.allowsEditing = YES; 
    imagePicker.delegate = self; 

    //[self presentModalViewController:imagePicker animated:YES]; <-- This method is deprecated use the following instead 

    [self presentViewController:imagePicker animated:YES completion:nil];