- (void)imagePickerController:(UIImagePickerController *)imagePicker didFinishPickingMediaWithInfo:(NSDictionary *)info { if (UTTypeEqual(kUTTypeMovie,(__bridge CFStringRef)[info objectForKey:UIImagePickerControllerMediaType])) { // ... } }
要么@H_403_5@
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) {
要么@H_403_5@
if ([mediaType isEqualToString:(NSString *)kUTTypeVideo] || [mediaType isEqualToString:(NSString *)kUTTypeMovie])
要么@H_403_5@
if (CFStringCompare ((__bridge CFStringRef) mediaType,kUTTypeMovie,0) == kcfCompareEqualTo)
要么@H_403_5@
if ([mediaType isEqualToString:@"public.movie"]
每个人似乎都有不同的做法.检查介质类型的推荐方法是什么?优选地,包括“所有图像类型”或“所有视频类型”的方式.@H_403_5@
解决方法
现在,iOS告诉你它是一个public.movie,但它明年会说些什么呢?你会看到有人检查public.video.太棒了,所以你硬编码了两种而不是一种.@H_403_5@
但问“这是一部电影吗?”不是更好吗?而不是硬编码您认为iOS将返回的特定类型?有办法做到这一点:@H_403_5@
NSString *mediaType = info[UIImagePickerControllerMediaType]; BOOL isMovie = UTTypeConformsTo((__bridge CFStringRef)mediaType,kUTTypeMovie) != 0;
如果mediaType表示电影,则使用此方法,如果返回电影(无论返回哪种特定类型),isMovie应为YES,因为所有电影都符合kUTTypeMovie.要非常清楚,如果它是kUTTypeVideo,它也会将其识别为电影,因为kUTTypeVideo符合kUTTypeMovie.@H_403_5@
NSString *mediaType = info[UIImagePickerControllerMediaType]; BOOL isImage = UTTypeConformsTo((__bridge CFStringRef)mediaType,kUTTypeImage) != 0;
如果返回图像,则isIamge应为YES,因为所有图像都符合kUTTypeImage.@H_403_5@
在这里查看Apple的(部分)类型树:Uniform Type Identifiers Are Declared in a Conformance Hierarchy.您可以获得一个不太有用但更完整的列表,列出系统当前识别的所有UTI以及它们与shell的一致性:@H_403_5@
/System/Library/Frameworks/CoreServices.framework/Frameworks\ /LaunchServices.framework/Versions/A/Support/lsregister -dump
特别是,您可以看到public.video的定义如下:@H_403_5@
-------------------------------------------------------- type id: 8344 uti: public.video description: video flags: exported active core apple-internal trusted icon: conforms to: public.movie tags: --------------------------------------------------------
请注意,如果类型相同,则UTTypeConformsTo返回true.来自Apple的文档:@H_403_5@
Returns true if the uniform type identifier is equal to or conforms to the second type.@H_403_5@