Bal*_*ali 10 objective-c uiimagepickercontroller ios
我有一个要求,用户需要从库中的gif文件列表中获取gif.我试图获取图像和视频没有任何问题.但是当我用作kUTTypeGIF媒体时,它会因错误而崩溃:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'没有可用的源0类型'
这是我的代码:
#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
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?如果kUTTypeGIF此处不支持媒体,如何向用户显示所有gif文件列表以供选择?我只需要在UIImagePickerController中显示gif文件
iOS 并没有为您提供一种简单的方法来确定(在使用 UIImagePickerController 时)存储在相机胶卷中的图片的底层文件格式是什么。Apple 的理念是,图像应该被视为一个UIImage对象,并且您不应该关心最终的文件格式是什么。
所以,既然你不能使用 UIImagePickerController 来过滤掉 GIF 文件。这里有几种可能性供您选择:
1)
选择图像后,您可以确定它是什么类型的文件。 下面是一个示例问题,询问如何确定图像是 PNG 还是 JPEG。一旦用户选择一个文件,您就会知道它是 GIF、JPEG、PNG 还是其他文件。
2)
您可以将任何 UIImage转换GIF为文件。这是一个指向可能能够提供帮助的图书馆的问题。
3)
您可以迭代整个相机胶卷,并将这些图像作为GIF文件转换/保存到应用程序的文档目录中。从这个相关问题中找到的枚举开始,然后通过 ImageIO 框架运行每张图片,将其转换为 gif 文件(我在解决方案#2 中指出的代码)。然后您可以滚动自己的选择器。
ps 你自己的代码不会工作,因为正如 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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |