是否有可能在应用程序中使用iOS 7的经过修改的Helvetica?

对于iOS 7,苹果公司做了一个特殊的修改版本的Helvetica Thin / Light,它有四舍五入的周期和冒号:

在这里输入图像说明

比较这个在Xcode中使用Helvetica-Neue Thin或Helvetica-Neue Light:

在这里输入图像说明

是否有可能开发具有圆形冒号和句点的特殊修改版本的应用程序?

编辑 :发现这些圆的冒号和时期不是由苹果定制devise的,他们是“字符替代”,你可以看到他们在你最喜欢的字体字形查看器。

以下是如何做到这一点。 即使阅读文档,也不清楚。

首先,你必须得到一个字体的特征,它会给你在UIFontDescriptorFeatureSettingsAttribute使用的UIFontDescriptorFeatureSettingsAttribute 。 我从这篇文章中得到了我的 。

这为您提供了functiontypes标识符键,以及您的值的选项,functionselect器标识符键。

 NSArray *timerDisplaySettings = @[ @{ UIFontFeatureTypeIdentifierKey: @(6), UIFontFeatureSelectorIdentifierKey: @(1) }, @{ UIFontFeatureTypeIdentifierKey: @(17), UIFontFeatureSelectorIdentifierKey: @(1) }]; 

那么你通过添加一个描述符来创build一个字体描述符 – 这样你就可以通过UIFont指定字体名称和族:

 UIFont *font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:32]; UIFontDescriptor *originalDescriptor = [font fontDescriptor]; UIFontDescriptor *timerDescriptor =[originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorFeatureSettingsAttribute: timerDisplaySettings }]; 

然后,closures循环并用你的描述符创build字体。 (大小“0.0”只是意味着我们不是从它的原始大小32缩放它。

 UIFont *timerFont = [UIFont fontWithDescriptor: timerDescriptor size:0.0]; 

为了将来的读者,看到字体特征数组,在Objective-C中是这样的:

 @import CoreText; 

 - (void)fontFeatures:(UIFont *)font { NSArray *features = CFBridgingRelease(CTFontCopyFeatures((__bridge CTFontRef)font)); if (features) { NSLog(@"%@: %@", font.fontName, features); } } 

对于HelveticaNeue-UltraLight产生:

 HelveticaNeue-UltraLight: ( { CTFeatureTypeIdentifier = 1; CTFeatureTypeName = Ligatures; CTFeatureTypeNameID = 258; CTFeatureTypeSelectors = ( { CTFeatureSelectorDefault = 1; CTFeatureSelectorIdentifier = 2; CTFeatureSelectorName = "Common Ligatures"; CTFeatureSelectorNameID = 259; } ); }, { CTFeatureTypeExclusive = 1; CTFeatureTypeIdentifier = 6; CTFeatureTypeName = "Number Spacing"; CTFeatureTypeNameID = 262; CTFeatureTypeSelectors = ( { CTFeatureSelectorDefault = 1; CTFeatureSelectorIdentifier = 0; CTFeatureSelectorName = "No Change"; CTFeatureSelectorNameID = 264; }, { CTFeatureSelectorIdentifier = 1; CTFeatureSelectorName = "Proportional Numbers"; CTFeatureSelectorNameID = 263; } ); }, { CTFeatureTypeExclusive = 1; CTFeatureTypeIdentifier = 17; CTFeatureTypeName = "Character Alternatives"; CTFeatureTypeNameID = 265; CTFeatureTypeSelectors = ( { CTFeatureSelectorDefault = 1; CTFeatureSelectorIdentifier = 0; CTFeatureSelectorName = "No Change"; CTFeatureSelectorNameID = 264; }, { CTFeatureSelectorIdentifier = 1; CTFeatureSelectorName = "Time Punctuation"; CTFeatureSelectorNameID = 266; }, { CTFeatureSelectorIdentifier = 2; CTFeatureSelectorName = "Compass Punctuation"; CTFeatureSelectorNameID = 267; }, { CTFeatureSelectorIdentifier = 3; CTFeatureSelectorName = "Weather Punctuation"; CTFeatureSelectorNameID = 268; }, { CTFeatureSelectorIdentifier = 4; CTFeatureSelectorName = "Round Lowercase Punctuation"; CTFeatureSelectorNameID = 269; } ); } ) 

因此,在iOS 8中,对于HelveticaNeue-UltraLight ,键17是“字符替代”,值1是“时间标点”。


要在Swift中看到这些特性,它是:

 import CoreText 

 func fontFeatures(font: UIFont) { if let features = CTFontCopyFeatures(font) as NSArray! { println("\(font.fontName): \(features)") } } 

是的,这些function可以通过iOS 7的新dynamictypes系统访问。 http://tirania.org/monomac/archive/2013/Sep-25.html