我有一个要求,用户需要从库中的gif文件列表中获取gif。我试图获取图像和视频都没有任何问题。但是当我使用kUTTypeGIF作为媒体时,它崩溃并显示错误:



这是我的代码:

#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>

@interface ViewController ()<UIImagePickerControllerDelegate, UINavigationControllerDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

-(IBAction)btnChooseGif:(id)sender {
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeGIF, nil];   // Here is the crash
    [self presentViewController:imagePicker animated:YES completion:nil];
}

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{

}
@end

我该如何解决?如果此处不支持kUTTypeGIF媒体,我如何向用户显示所有gif文件列表以供选择?我只需要在UIImagePickerController中显示gif文件

最佳答案

iOS没有为您提供一种简单的方法来确定(使用UIImagePickerController时)相机胶卷中存储的图片的基本文件格式。苹果公司的理念是,图像应被视为UIImage对象,并且您不必理会最终的文件格式是什么。

因此,由于您不能使用UIImagePickerController来过滤掉GIF文件。这为您提供了两种可能性:

1)

选择图像后,您可以确定它是哪种文件。 Here's an example question that asks how to determine if the image is a PNG or JPEG。用户选择文件后,您将知道它是GIF还是JPEG或PNG或其他格式。

2)

您可以将任何UIImage转换为GIF文件。 Here's a question that points to a library that might be able to help

3)

您可以遍历整个相机胶卷,然后将这些图像作为GIF文件转换/保存到应用程序的文档目录中。可以从with enumeration found in this related question开始,然后通过ImageIO框架运行每张图片,将其转换为gif文件(我在解决方案2中指出的代码)。然后,您可以滚动自己的选择器。

p.s.您自己的代码无法正常工作,因为正如Nathan所指出的那样,gif不是一种媒体类型。该功能指出可用的媒体类型:

-(IBAction)btnChooseGif:(id)sender {
    NSArray *availableMedia = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypePhotoLibrary];

    NSLog(@"availableMedia is %@", availableMedia);

    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeImage, nil];
    [self presentViewController:imagePicker animated:YES completion:nil];
}

关于ios - 列出照片库中的所有gif文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45231177/

10-14 23:45