gpt4 book ai didi

macos - 预加载字体菜单

转载 作者:行者123 更新时间:2023-12-03 17:03:15 25 4
gpt4 key购买 nike

我正在编写一个应用程序,它有一个自定义对话框,其中包含一个 NSPopupButton,该按钮使用属性字符串显示所有可用字体,以便以实际字体显示字体名称。

因为我预计该对话框只会在应用程序运行的一小部分时间内打开,所以它位于其 xib 文件中,并且仅在需要时才加载。

我的“问题”是,第一次(仅)当用户单击字体按钮时,有 1 5-10 秒的滞后(旋转沙滩球)。我这么认为是因为它必须呈现底层菜单。我在对话框的 awakeFromNib 期间从 FSFontManager 加载字体,但这显然是不够的。

在我追寻一堆死胡同试图弄清楚如何让菜单“预渲染”之前,有人对我最聪明的攻击路线可能是什么有一些建议吗? (最好在单独的线程中???)

谢谢

最佳答案

只是想分享我最终采用的解决方案。

在应用程序委托(delegate)的 awakeFromNib 中,我生成了一个新线程,它除了创建一个独立的 NNTextField 之外什么也不做,循环整体字体,使用该字体使用属性字符串更新文本字段的内容,然后自行关闭。

现在,除非我非常快地进入滞后的字体菜单,否则它会毫无滞后地弹出。

我在 MainMenu.xib 中创建了一个“自由 float ”NSTextField(即它不属于任何窗口)并将其连接到应用程序委托(delegate)中的 IBOutlet。

以下内容来 self 的应用程序委托(delegate)的实现:

-(void)awakeFromNib
{
// irrelevant stuff deleted...

[NSThread detachNewThreadSelector:@selector(preloadFonts) toTarget:self withObject:nil];
}

-(void)preloadFonts
{
NSTextField *tf = [[NSTextField alloc]init];
NSArray *fonts = [[NSFontManager sharedFontManager] availableFontFamilies];
[fonts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *name=obj;
NSDictionary *attributes = [NSDictionary dictionaryWithObject:[NSFont fontWithName:name size:12.]
forKey:NSFontAttributeName];
NSAttributedString *str = [[NSAttributedString alloc]initWithString:name attributes:attributes];
[tf setAttributedStringValue:str];
}];
}

关于macos - 预加载字体菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21498766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com