ios – 确定图像选择器媒体类型是否为视频

前端之家收集整理的这篇文章主要介绍了ios – 确定图像选择器媒体类型是否为视频前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经看到了各种方法来检查-imagePickerController:didFinishPickingMediaWithInfo:中返回的媒体类型是否是视频.例如,我的方式:
  1. - (void)imagePickerController:(UIImagePickerController *)imagePicker
  2. didFinishPickingMediaWithInfo:(NSDictionary *)info
  3. {
  4. if (UTTypeEqual(kUTTypeMovie,(__bridge CFStringRef)[info objectForKey:UIImagePickerControllerMediaType]))
  5. {
  6. // ...
  7. }
  8. }

要么

  1. NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
  2. if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) {

要么

  1. if ([mediaType isEqualToString:(NSString *)kUTTypeVideo] ||
  2. [mediaType isEqualToString:(NSString *)kUTTypeMovie])

要么

  1. if (CFStringCompare ((__bridge CFStringRef) mediaType,kUTTypeMovie,0)
  2. == kcfCompareEqualTo)

要么

  1. if ([mediaType isEqualToString:@"public.movie"]

每个人似乎都有不同的做法.检查介质类型的推荐方法是什么?优选地,包括“所有图像类型”或“所有视频类型”的方式.

解决方法

最好检查一下与特定UTI的一致性.

现在,iOS告诉你它是一个public.movi​​e,但它明年会说些什么呢?你会看到有人检查public.video.太棒了,所以你硬编码了两种而不是一种.

但问“这是一部电影吗?”不是更好吗?而不是硬编码您认为iOS将返回的特定类型?有办法做到这一点:

  1. NSString *mediaType = info[UIImagePickerControllerMediaType];
  2. BOOL isMovie = UTTypeConformsTo((__bridge CFStringRef)mediaType,kUTTypeMovie) != 0;

如果mediaType表示电影,则使用此方法,如果返回电影(无论返回哪种特定类型),isMovie应为YES,因为所有电影都符合kUTTypeMovie.要非常清楚,如果它是kUTTypeVideo,它也会将其识别为电影,因为kUTTypeVideo符合kUTTypeMovie.

同样,您可以检查返回的内容是否为图像:

  1. NSString *mediaType = info[UIImagePickerControllerMediaType];
  2. BOOL isImage = UTTypeConformsTo((__bridge CFStringRef)mediaType,kUTTypeImage) != 0;

如果返回图像,则isIamge应为YES,因为所有图像都符合kUTTypeImage.

在这里查看Apple的(部分)类型树:Uniform Type Identifiers Are Declared in a Conformance Hierarchy.您可以获得一个不太有用但更完整的列表,列出系统当前识别的所有UTI以及它们与shell的一致性:

  1. /System/Library/Frameworks/CoreServices.framework/Frameworks\
  2. /LaunchServices.framework/Versions/A/Support/lsregister -dump

特别是,您可以看到public.video的定义如下:

  1. --------------------------------------------------------
  2. type id: 8344
  3. uti: public.video
  4. description: video
  5. flags: exported active core apple-internal trusted
  6. icon:
  7. conforms to: public.movie
  8. tags:
  9. --------------------------------------------------------

请注意,如果类型相同,则UTTypeConformsTo返回true.来自Apple的文档:

Returns true if the uniform type identifier is equal to or conforms to the second type.

猜你在找的iOS相关文章