我有一个要求,用户需要从库中的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/