7

-imagePickerController:didFinishPickingMediaWithInfo:返されたメディア タイプがビデオかどうかを確認するさまざまな方法を見てきました。たとえば、私のやり方:

- (void)imagePickerController:(UIImagePickerController *)imagePicker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    if (UTTypeEqual(kUTTypeMovie, 
    (__bridge CFStringRef)[info objectForKey:UIImagePickerControllerMediaType])) 
    {
        // ...
    }
}

また

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

また

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

また

if (CFStringCompare ((__bridge CFStringRef) mediaType, kUTTypeMovie, 0)
        == kCFCompareEqualTo) 

また

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

誰もがこれを行うさまざまな方法を持っているようです。メディアの種類を確認するための推奨される方法は何ですか? できれば、「すべての画像タイプ」または「すべてのビデオタイプ」を含める方法を使用してください。

4

2 に答える 2

16

代わりに、特定の UTI との適合性を確認する方がよいでしょう。

今のところ、iOS はpublic.movie. チェックしている人も見public.videoられます。1 つではなく 2 つの型をハードコーディングしました。

でも「これは映画ですか?」と聞いたほうがいいのではないでしょうか。iOS が返すと思われる特定の型をハード コードするのではなく、それを行う方法があります:

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

すべての映画isMovieが. 明確にするために、これが の場合、 に準拠しているため、映画としても認識されます。YESkUTTypeMoviekUTTypeVideokUTTypeVideokUTTypeMovie

同様に、返されたものが画像かどうかを確認できます。

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

isIamgeYESすべての画像は に準拠しているため、画像が返された場合は になりますkUTTypeImage

Apple の (部分的な) タイプ ツリーを参照してください: Uniform Type Identifiers Are Declared in a Conformance Hierarchy . システムで現在認識されているすべての UTI の完全なリストと、シェルからの適合性については、あまり役に立ちませんが、より完全なリストを取得するには、次のコマンドを使用します。

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

特に、 public.video が次のように定義されていることがわかります。

--------------------------------------------------------
type    id:            8344
    uti:           public.video
    description:   video
    flags:         exported  active  core  apple-internal  trusted  
    icon:          
    conforms to:   public.movie
    tags:          
--------------------------------------------------------

タイプが同じ場合もUTTypeConformsTo返すことに注意してください。trueAppleのドキュメントから:

統一型識別子が 2 番目の型と等しいか準拠している場合は true を返します。

于 2015-03-31T20:01:03.780 に答える