gpt4 book ai didi

ios - 在 iOS 上显示按比例间隔的数字(而不是等宽/表格)

转载 作者:可可西里 更新时间:2023-11-01 03:26:14 24 4
gpt4 key购买 nike

我通过将数字存储在 NSAttributedString 中并使用“drawAtPoint:”渲染在 iOS 中渲染数字(针对 7 及更高版本)。我正在使用 Helvetica Neue。

我注意到像这样绘制的数字数字不成比例 – 字形都具有相同的宽度。即使是一个瘦小的“1”也占据了与“0”相同的空间。

一项测试证实了这一点:

for(NSInteger i=0; i<10; ++i)
{
NSString *iString = [NSString stringWithFormat: @"%d", i];
const CGSize iSize = [iString sizeWithAttributes: [self attributes]];
NSLog(@"Size of %d is %f", i, iSize.width);
}

与,别处:

-(NSDictionary *) attributes
{
static NSDictionary * attributes;
if(!attributes)
{
attributes = @{
NSFontAttributeName: [UIFont systemFontOfSize:11],
NSForegroundColorAttributeName: [UIColor whiteColor]
};
}
return attributes;
}

由此产生的字形都具有相同的宽度 6.358 点。

是否有一些渲染选项我可以打开它以启用比例数字字形?是否有另一种字体(理想情况下类似于 Helvetica Neue)支持比例数字字形(理想情况下是内置的)?还有什么吗?

谢谢。

最佳答案

iOS 7 允许您使用 UIFontDescriptor 实例指定字体。然后从描述符中获取 UIFont 实例。

给定一个 UIFontDescriptor 也可以通过使用方法 [fontDescriptor fontDescriptorByAddingAttributes: attibutes] 获得它的自定义改变一些特性,其中 attributes 是字体属性的 NSDictionary

Apple 在 UIFontDescriptor reference 中记录属性.

根据引用资料,一个特定的字体描述符属性 UIFontDescriptorFeatureSettingsAttribute 允许您提供“表示非默认字体功能设置的字典数组。每个字典包含 UIFontFeatureTypeIdentifierKeyUIFontFeatureSelectorIdentifierKey。”

UIFontFeatureTypeIdentifierKeyUIFontFeatureSelectorIdentifierKey 的文档在 Apple's Font Registry documentation 中. pdf of slides of an Apple presentation 中涵盖了比例数字的具体情况,所以我只是解除了它。

此代码将采用现有的 UIFont 实例并返回一个具有比例数字的新实例:

// You'll need this somewhere at the top of your file to pull
// in the required constants.
#import <CoreText/CoreText.h>



UIFont *const existingFont = [UIFont preferredFontForTextStyle: UIFontTextStyleBody];
UIFontDescriptor *const existingDescriptor = [existingFont fontDescriptor];

NSDictionary *const fontAttributes = @{
// Here comes that array of dictionaries each containing UIFontFeatureTypeIdentifierKey
// and UIFontFeatureSelectorIdentifierKey that the reference mentions.
UIFontDescriptorFeatureSettingsAttribute: @[
@{
UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
UIFontFeatureSelectorIdentifierKey: @(kProportionalNumbersSelector)
}]
};

UIFontDescriptor *const proportionalDescriptor = [existingDescriptor fontDescriptorByAddingAttributes: fontAttributes];
UIFont *const proportionalFont = [UIFont fontWithDescriptor: proportionalDescriptor size: [existingFont pointSize]];

如果您愿意,您可以将其添加为 UIFont 上的类别,等等。

编辑说明:感谢 Chris Schwerdt 的改进。

关于ios - 在 iOS 上显示按比例间隔的数字(而不是等宽/表格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19954581/

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