UIImagePickerController + Cropping:allowEditing是什么,它不是什么?

iti*_*nce 10 image objective-c uiimagepickercontroller ios ios7

在阅读了关于UIImagePickerController的Apple的文档和示例代码之后,在Stackoverflow(或此处)阅读了许多教程甚至问题后,我得出结论,内置的UIImagePicker能够呈现"裁剪窗口"用户并让用户裁剪并移动他想要使用的图像的右侧部分.

但是在iOS 7.1上查看这些示例,似乎没有裁剪窗口.什么都没有让用户裁剪出拍摄图像的一部分.所有测试都发生在真实硬件(iPhone 5S)上,因为缺少相机而没有使用iPhone模拟器;)

此外,在委托方法"didFinishPickingMediaWithInfo"中,"info"-NSDictionary中没有"UIImagePickerControllerEditedImage"条目.

我做了什么:

    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];
Run Code Online (Sandbox Code Playgroud)

和委托方法:

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

此时,字典中只有3个键可用,名称为"info":

  • UIImagePickerControllerOriginalImage
  • UIImagePickerControllerMediaMetadata
  • UIImagePickerControllerMediaType

没有其他的.此外,没有出现裁剪窗口或任何类似控件.

我对ImagePicker行为的期望是错误的吗?在此SF-Question中,用户编写了"裁剪窗口出现".该功能被删除了吗?文档是否过时或我在这里完全错了?

我也尝试从另一个类似问题的答案中获取此代码:

- (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];
    }];
}
Run Code Online (Sandbox Code Playgroud)

没有出现裁剪窗口,info-NSDictionary上没有关键字"UIImagePickerControllerEditedImage".

有人可以解释我正确的行为吗?非常感谢你提前.

小智 3

这个对我有用:

-(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];
}
Run Code Online (Sandbox Code Playgroud)