如何在iOS中使用UIImagePickerController时检测用户是否从库中选择图片或视频?

时间:2014-12-01 09:29:54

标签: ios objective-c uiimagepickercontroller

我在ios应用程序中使用UIImagePickerController为用户提供了从照片库中选择照片或视频的选项。我将视频限制为1分钟。 这是我的代码:

在按钮操作中:

- (void)getPictureOrVideoFromLibrary {

    CFStringRef mTypes[2] = { kUTTypeImage, kUTTypeMovie };
    CFArrayRef mTypesArray = CFArrayCreate(CFAllocatorGetDefault(), (const void**)mTypes, 2, &kCFTypeArrayCallBacks);
    imagePickerController.mediaTypes = (__bridge NSArray*)mTypesArray;
    CFRelease(mTypesArray);

    imagePickerController.videoMaximumDuration = 60.0f;
    imagePickerController.allowsEditing = YES;

    imagePickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    [self presentViewController:imagePickerController animated:YES completion:nil];
}

我想在photolibrary中显示图片和视频,因此我使用了kUTTypeImagekUTTypeMovie。 在这里,我将videoMaximumDuration设置为60.0f,将allowsEditing设置为YES,因为我想将视频长度限制为1分钟。

我面临的问题: 当用户从库中选择视频时没有问题,但如果用户从库中选择图片我遇到问题,图片上有一个矩形框。

Picker显示如下(带视频和图片)[screenshot1]:

enter image description here

当用户选择视频时,它显示如下(它按预期工作):

enter image description here

当用户选择图片时,它显示如下[screenshot2]:

enter image description here

我不想在这里显示矩形裁剪框。

用户按“选择”后,我将能够在委托方法'didFinishPickingMediaWithInfo'中检测是照片还是视频。

但我想知道从截图1到截图2是照片还是视频。所以我可以将allowsediting设置为NO以摆脱那个矩形框。

有可能吗?

我不想将这两个选项都显示为“从库中选择照片”,“从库中选择视频”。 我只想显示一个选项“从库中选择照片或视频”。

有没有办法检测用户是选择图片还是视频,还是可以摆脱那个矩形框?

有可能实现吗?

我需要你宝贵的建议。 请帮我。 提前致谢。

2 个答案:

答案 0 :(得分:3)

在委托方法

上查看
   - (void)imagePickerController:(UIImagePickerController *)pickerImage didFinishPickingMediaWithInfo:(NSDictionary *)info
{

  // UIImagePickerControllerMediaType
 if(info[UIImagePickerControllerMediaType]==kUTTypeImage)
 {
    //image
 }
 else
 {
    //video
 }
}

1)添加MobileCoreServices.framework

2)导入头文件下方。 MobileCoreServices / MobileCoreServices.h

答案 1 :(得分:1)

@shesh nath答案中的一点点变化。我只是将 kUTTypeImage 转换为NSString来解决此警告:

  

不同指针类型的比较('id _Nullable'和'CFStringRef'   (又名'const struct __CFString *'))

- (void)imagePickerController:(UIImagePickerController*)imagePicker didFinishPickingMediaWithInfo:(NSDictionary*)info {

    if([info[UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)(kUTTypeImage)])
    {
        NSLog(@"Image");
        //image
    }
    else
    {
        NSLog(@"Video");
        //video
    }
}  

不要忘记添加MobileCoreServices框架。