如何将QuickTime播放器栏插入自定义QuickLook插件?

时间:2012-06-15 11:13:46

标签: objective-c xcode macos quicktime quicklook

问题很简单。我想模仿默认OSX的Audio QuickLook插件的行为,我需要QuickTime播放器,它通常停留在预览窗口的底部。我也希望当我使用自定义插件时,我也能听到我正在预览的文件的声音。

以下是一些代码(来自GeneratePreviewForURL.m文件),可能有助于更好地理解上下文:

OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options)
{
    @autoreleasepool {

        if (QLPreviewRequestIsCancelled(preview)) return noErr;

        NSMutableString *html=[[NSMutableString alloc] init];
        NSDictionary *props;
        NSData *imageData=[NSData dataWithContentsOfFile:@"/tmp/IMAGE.png"];

        props=@{
            (__bridge NSString *)kQLPreviewPropertyTextEncodingNameKey:@"UTF-8",
            (__bridge NSString *)kQLPreviewPropertyMIMETypeKey:@"text/html",
            (__bridge NSString *)kQLPreviewPropertyAttachmentsKey:@{
                    @"IMAGE":@{
                            (__bridge NSString *)kQLPreviewPropertyMIMETypeKey:@"image/png",
                            (__bridge NSString *)kQLPreviewPropertyAttachmentDataKey: imageData,
                            },
                    },
            };

        [html appendString:@"<html>"];
        [html appendString:@"<body>"];
        [html appendString:@"<img src=\"cid:IMAGE\">"];
        [html appendString:@"<br><br>"];
        //...
        [html appendString:@"</body>"];
        [html appendString:@"</html>"];

        QLPreviewRequestSetDataRepresentation(preview,(CFDataRef)[html dataUsingEncoding:NSUTF8StringEncoding],kUTTypeHTML,(CFDictionaryRef)props);
    }

    return noErr;
}

1 个答案:

答案 0 :(得分:0)

使用OSX 10.6.8上的Xcode 4.2,只需使用<audio>标记并使用<src>属性加载文件即可获得该结果(如果您还希望在其中播放音频)打开预览窗口你只需要将<autoplay>属性设置为“true”)...不幸的是现在在Mavericks上使用Xcode 5.1,似乎都没有使用cid:方案(你已经使用过)在加载.png文件的示例代码中完成工作!

只有reporting a bug to Apple可能(可能)解决了这个问题。