我正在构建一个QuickLook插件。我想更改用户点击空格键时弹出窗口的宽度。
我已经读过项目的info.plist文件中有两个键可以自定义高度和宽度。即使我更改了这些值,我也无法将预览窗口的大小调整为我想要的值。
我不知道还有什么可以尝试。有什么想法吗?
谢谢!
答案 0 :(得分:4)
以为我会对此有所了解。我没有尝试过以下任何建议,所以没有人抱有希望。我假设您正在使用生成器回调:
OSStatus (*GeneratePreviewForURL)(
void *thisInterface,
QLPreviewRequestRef preview,
CFURLRef url,
CFStringRef contentTypeUTI,
CFDictionaryRef options
);
在其他任何事情之前,您可以手动检查options
字典参数,并验证kQLPreviewPropertyWidthKey
和kQLPreviewPropertyHeightKey
键确实映射到所需的CFNumber
值。
参考这些属性,Apple QuickLook编程指南说:
请注意,此属性是一个提示;快速查看可能会设置宽度 自动进行某些类型的预览。值必须是 封装在CFNumber对象中。
(编辑>如果您的预览表示具有灵活性,您可以尝试找到一个预览类型,QuickLook会根据上述声明来表示您的尺寸提示。只是想一想。)
在QuickLook框架二进制文件上运行nm
会显示一些未记录的kQLPreviewProperty--
常量以及前面提到的宽度和高度键。引起我注意的是kQLPreviewPropertyAutoSizeKey
。回顾Apple关于忽略设置自动大小的提示的声明,这可能很重要吗?遵循QuickLook.framework/Headers/QLBase.h
中的约定,您可以尝试声明
extern const CFStringRef kQLPreviewPropertyAutoSizeKey;
然后你可以尝试将CFNumber 0与options
字典中的属性键相关联。还有其他未记录的密钥,例如kQLPreviewPropertyAttributesKey
。
返回您提到的Info.plist,Apple says,了解这些密钥QLPreviewWidth
和QLPreviewHeight
:
此编号为Quick Look提供了宽度(以磅为单位)的提示 预览。 如果生成器需要太长时间,它会使用这些值 制作预览。(强调添加)
这是有人提出在你的生成器中调用sleep()的可怕建议。但我很困惑为什么 Apple将遵循依赖于生成器延迟的大小提示。 (?)
编辑另请注意,上述声明中的Info.plist提示必须以点(不是像素)表示,unit取决于用户的屏幕分辨率。
答案 1 :(得分:2)
最近我自己开发了一个使用HTML + CSS并面临同样问题的Quick Look插件。 我的解决方案是测试不在Xcode和qlmanage中的插件作为可执行文件,而是从我的用户库尝试真正的.qlgenerator。
从我的用户库调用生成器时,Quick Look窗口的大小完全按照我在* -Info.plist中指定的方式调整大小。
答案 2 :(得分:0)
我遇到了同样的问题,并且可能提供一些线索:就我而言,我正在为自定义文件格式生成图像快速预览。我启动预览上下文以使用
将我的预览绘制到其中 CGContextRef QLPreviewRequestCreateContext(QLPreviewRequestRef preview, CGSize size, Boolean isBitmap, CFDictionaryRef properties);
奇怪的是,如果我将isBitmap设置为true,则快速查看会将预览面板的大小调整为为上下文指定的大小(至少达到一定大小)。但是,如果将isBitmap设置为false,则似乎无视上下文大小,而是始终显示全尺寸的预览面板,其中矢量图形图像缩放为覆盖整个面板。
因此,如果您使用位图图形预览上下文,则似乎预览面板将设置为您指定的上下文的大小。但是,在使用矢量图预览上下文时(我想要的),我没有找到任何设置面板大小的方法。