【问题标题】:allowEditing property of UIImagePickerController creating issuesUIImagePickerController 的 allowEditing 属性创建问题
【发布时间】:2015-08-17 13:05:19
【问题描述】:

我正在尝试使用 UIImagePickerController 拍摄图像。如果属性 allowEditing 为 NO,则一切正常。但是,一旦我将属性值更改为 YES,就不会出现图像。它同时出现在相机和库中。

以下是点击按钮打开相机时执行的代码。

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        UIImagePickerController *controller_imagePicker = [[UIImagePickerController alloc] init];
        [controller_imagePicker setDelegate:self];
        [controller_imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
        [controller_imagePicker setAllowsEditing:YES];
        controller_imagePicker.modalPresentationStyle = UIModalPresentationOverCurrentContext;
        [self presentViewController:controller_imagePicker animated:YES completion:nil];
    }

当我们拍摄图像并对其进行编辑并使用图像时。黑色图像出现在相应的图像视图中。

此外,一旦相机打开,我就会收到以下警告:“对未渲染的视图进行快照会导致快照为空。请确保您的视图在快照之前或屏幕更新后的快照至少已渲染一次。”

有什么想法吗??

【问题讨论】:

    标签: ios objective-c uiimageview uiimagepickercontroller


    【解决方案1】:
    #import <MobileCoreServices/UTCoreTypes.h>
    ….
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        UIImagePickerController *imagePickerCamera =[[UIImagePickerController alloc] init];
        imagePickerCamera.delegate = self;
        imagePickerCamera.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeImage,nil];
        imagePickerCamera.allowsEditing = YES;
        imagePickerCamera.sourceType = UIImagePickerControllerSourceTypeCamera;
    
        [self presentViewController:imagePickerCamera  animated:YES completion:nil];
    }
    
    else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
    {
        UIImagePickerController *imagePickerAlbum =[[UIImagePickerController alloc] init];
        imagePickerAlbum.delegate = self;
        imagePickerAlbum.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeImage,nil];
        imagePickerAlbum.allowsEditing = YES;
        imagePickerAlbum.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    
        [self presentViewController:imagePickerAlbum animated:YES completion:nil];
    }
    
    
    #pragma mark - ImagePickerController Delegate
    
    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
    
        if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone) {
            [picker dismissViewControllerAnimated:YES completion:nil];
        }
        else
        {
            [popover dismissPopoverAnimated:YES];
        }
    
    
        UIImage* originalImage = nil;
        originalImage = [info objectForKey:UIImagePickerControllerEditedImage];
    
        if(originalImage==nil)
        {
            originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];
        }
    
        if(originalImage==nil)
        {
            originalImage = [info objectForKey:UIImagePickerControllerCropRect];
        }
    }
    
    -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    {
        [picker dismissViewControllerAnimated:YES completion:nil];
    }
    

    【讨论】:

    • @rohitax,我认为这是我给 yopu 的完美解决方案,如果你满意请点赞
    • 没有成功。还有其他想法吗?
    【解决方案2】:

    如果允许编辑,您应该使用 UIImagePickerControllerEditedImage 键而不是 UIImagePickerControllerOriginalImage

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

    【讨论】:

    • 没有成功,亲爱的。还有什么想法吗??
    • 您收到的警告似乎与此问题相同:stackoverflow.com/questions/18890003/…
    • 你能在 imagePickerController:didFinishPickingMediaWithInfo: 方法上设置一个断点并打印你在 lldb 中得到的 image 的对象吗?是零吗? (NSDictionary *)info 对象呢?
    • 感谢@zy.liu 的努力。由于渲染图像的类别而出错。我删除了那个,现在它工作得很好。
    猜你喜欢
    • 2020-11-22
    • 2014-07-31
    • 2013-11-28
    • 2019-08-21
    • 2014-08-21
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多