繁体   English   中英

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

[英]UIImagePickerController + Cropping: what does allowEditing and what does it not?

在阅读了关于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];

和委托方法:

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

此时,字典中只有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];
    }];
}

没有出现裁剪窗口,info-NSDictionary上没有关键字“UIImagePickerControllerEditedImage”。

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

这个对我有用:

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

首先确保导入以下头文件(必须将MobileCoreServices框架导入到项目中):

#import <MobileCoreServices/UTCoreTypes.h>

然后尝试以下代码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM