当前位置:  开发笔记 > 前端 > 正文

如何在我的应用程序中获得Lucida Grande斜体?

如何解决《如何在我的应用程序中获得LucidaGrande斜体?》经验,为你挑选了1个好方法。

不幸的是,Lucida Grande没有斜体变体,我需要一个.

我在这里的选择似乎有限,我希望有人对我有更好的选择.

首先,我尝试通过执行以下操作应用NSAffineTransform:

NSFont *theFont = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSMiniControlSize]];

const CGFloat kRotationForItalicText = -15.0;

NSAffineTransform *italicTransform = [NSAffineTransform transform];

[italicTransform scaleBy:[NSFont systemFontSizeForControlSize:NSMiniControlSize]];
[italicTransform rotateByDegrees:kRotationForItalicText];

theFont = [NSFont fontWithDescriptor:[theFont fontDescriptor] textTransform:italicTransform];

但是,这不会产生特别易读的文本.

我的下一个选择是切换到另一种字体:

theFont = [NSFont userFontOfSize:[NSFont labelFontSize]];
theFont = [sharedFontManager convertFont:theFont toHaveTrait:NSItalicFontMask];

虽然这里的文字在斜体时是可读的,但我宁愿使用相同的字体,因为它显然是不同的.

当然,我可以对我的斜体和非斜体文本使用userFontOfSize字体,但我目前仅限于使用systemFontOfSize字体.

我还有其他(好的)选择吗?

谢谢.



1> ericg..:

这个答案与我最初的答案类似,但经过更多测试后,可以更新.

所以,首先,我创建斜体字体的方法存在严重缺陷.我不需要简单地对文本应用旋转,而是需要应用偏斜变换.我最终找到了一个很好的偏斜变换来应用于WebKit的字体代码.它包含了倾斜变换:

CGAffineTransformMake(1, 0, -tanf(SYNTHETIC_OBLIQUE_ANGLE * acosf(0) / 90), 1, 0, 0)

它确实很好看.

简单地使用不同的字体不是正确的答案.虽然Lucida Sans字体与Lucida Grande(由systemFontOfSize返回)几乎完全相同,并且具有真正的斜体变体,但斜体变体不会以斜体绘制日文字符.

因此,似乎唯一的答案是获取systemFontOfSize,检查它是否具有斜体变体,如果没有,则添加偏斜变换.

这是我的最终解决方案:

NSFont              *theFont            = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSMiniControlSize]];
NSFontManager       *sharedFontManager  = [NSFontManager sharedFontManager];

if ( wantItalic ) 
{
    theFont = [sharedFontManager convertFont:theFont toHaveTrait:NSItalicFontMask];

    NSFontTraitMask fontTraits = [sharedFontManager traitsOfFont:theFont];

    if ( !( (fontTraits & NSItalicFontMask) == NSItalicFontMask ) ) 
    {
        const CGFloat kRotationForItalicText = -14.0;

        NSAffineTransform *fontTransform = [NSAffineTransform transform];           

        [fontTransform scaleBy:[NSFont systemFontSizeForControlSize:NSMiniControlSize]];

        NSAffineTransformStruct italicTransformData;

        italicTransformData.m11 = 1;
        italicTransformData.m12 = 0;
        italicTransformData.m21 = -tanf( kRotationForItalicText * acosf(0) / 90 );
        italicTransformData.m22 = 1;
        italicTransformData.tX  = 0;
        italicTransformData.tY  = 0;

        NSAffineTransform   *italicTransform = [NSAffineTransform transform];

        [italicTransform setTransformStruct:italicTransformData];

        [fontTransform appendTransform:italicTransform];

        theFont = [NSFont fontWithDescriptor:[theFont fontDescriptor] textTransform:fontTransform];
    }
}

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有