gpt4 book ai didi

objective-c - Retina 显示屏的字体大小

转载 作者:行者123 更新时间:2023-12-03 16:19:41 26 4
gpt4 key购买 nike

我的 Mac OS 应用程序使用如下代码绘制一些文本:

void drawString(NSString* stringToDraw)
{
NSFontManager *fontManager = [NSFontManager sharedFontManager];
NSString* fontName = [NSString stringWithCString: "Helvetica" encoding: NSMacOSRomanStringEncoding];
NSFont* font = [fontManager fontWithFamily:fontName traits:0 weight:5 size:9];
NSMutableDictionary *attribs = [[NSMutableDictionary alloc] init];
[attribs setObject:font forKey:NSFontAttributeName];
[stringToDraw drawAtPoint:NSMakePoint (0, 0) withAttributes:attribs];
}

由于文本绘制只是应用程序的一小部分,因此到目前为止,这种简单的方法效果很好。但现在有了新的视网膜显示屏,用户提示文本与其他图形相比显得太大。似乎给出绝对字体大小(在我的例子中为 9)不再有效。

如何修复此代码,使其适用于视网膜和非视网膜显示器?

最佳答案

字体大小以磅为单位,而不是像素。因此任何值都应该与视网膜分辨率无关。例如,这段代码可以正常工作:

- (void)drawRect:(NSRect)dirtyRect
{
CGRect textRect = CGRectInset(self.bounds, 15.0, 15.0);

[[[NSColor whiteColor] colorWithAlphaComponent:0.5] setFill];
NSRectFillUsingOperation(textRect, NSCompositeSourceOver);

NSFont *font = [[NSFontManager sharedFontManager] fontWithFamily:@"Helvetica"
traits:0.0
weight:5.0
size:30.0];
[@"Hello\nWorld" drawInRect:textRect
withAttributes:@{ NSFontAttributeName : font }];
}

结果:

Non-retina

Retina

如果您对不同的显示模式有精确的像素大小,请尝试如下操作:

CGFloat contentsScale = self.window.backingScaleFactor;
CGFloat fontSize = (contentsScale > 1.0 ? RETINA_FONT_SIZE : STANDARD_FONT_SIZE);
NSFont *font = [[NSFontManager sharedFontManager] fontWithFamily:@"Helvetica"
traits:0.0
weight:5.0
size:fontSize];

有效果吗?

关于objective-c - Retina 显示屏的字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11922379/

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