【发布时间】:2013-11-25 00:19:56
【问题描述】:
我正在构建一个 QuickLook 插件。我想更改用户按空格键时弹出的窗口的宽度。
我读过项目的 info.plist 文件中有两个键,其中高度和宽度是可自定义的。即使我更改了这些值,我也无法将预览窗口的大小设置为我想要的大小。
我不知道还能尝试什么。有什么想法吗?
谢谢!
【问题讨论】:
标签: objective-c cocoa quicklook
我正在构建一个 QuickLook 插件。我想更改用户按空格键时弹出的窗口的宽度。
我读过项目的 info.plist 文件中有两个键,其中高度和宽度是可自定义的。即使我更改了这些值,我也无法将预览窗口的大小设置为我想要的大小。
我不知道还能尝试什么。有什么想法吗?
谢谢!
【问题讨论】:
标签: objective-c cocoa quicklook
我想我会对此进行一些研究。我没有尝试过以下任何建议,所以没有人抱有希望。我假设您正在使用生成器回调:
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 取决于用户的屏幕分辨率。
【讨论】:
最近我自己开发了一个快速查看插件,它使用 HTML+CSS 并遇到了同样的问题。 我的解决方案是不在 Xcode 和 qlmanage 中测试插件作为可执行文件,而是从我的用户库中尝试 real .qlgenerator。
从我的用户库调用生成器时,快速查看窗口的大小完全按照我在 *-Info.plist 中指定的方式调整。
【讨论】:
我遇到了同样的问题,可能会提供一些线索:在我的例子中,我正在为我的自定义文件格式生成图像快速预览。我启动预览上下文以使用
绘制我的预览CGContextRef QLPreviewRequestCreateContext(QLPreviewRequestRef preview, CGSize size, Boolean isBitmap, CFDictionaryRef properties);
奇怪的是,如果我将 isBitmap 设置为 true,快速查看会将预览面板大小调整为为上下文指定的大小(至少达到一定大小)。但如果将 isBitmap 设置为 false,它似乎会忽略上下文大小,而是始终显示全尺寸预览面板,其中矢量图形图像缩放以覆盖整个面板。
因此,如果您使用位图图形预览上下文,预览面板似乎将设置为您指定的上下文的大小。但是,在使用矢量图形预览上下文(这是我想要的)时,我还没有找到任何方法来设置面板的大小。
【讨论】: