我正在尝试为 otf 字体 pluto-sans 启用样式替代方案,但是无论我做什么,默认设置都是它使用的。
当我在 xcode 调试中查看字体属性时,我得到以下信息
(
{
CTFeatureTypeIdentifier = 0;
CTFeatureTypeName = "All Typographic Features";
CTFeatureTypeNameID = "-100";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorDefault = 1;
CTFeatureSelectorIdentifier = 0;
CTFeatureSelectorName = On;
CTFeatureSelectorNameID = "-101";
}
);
},
{
CTFeatureTypeExclusive = 1;
CTFeatureTypeIdentifier = 6;
CTFeatureTypeName = "Number Spacing";
CTFeatureTypeNameID = "-700";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorIdentifier = 0;
CTFeatureSelectorName = "Monospaced Numbers";
CTFeatureSelectorNameID = "-701";
},
{
CTFeatureSelectorDefault = 1;
CTFeatureSelectorIdentifier = 4;
CTFeatureSelectorName = "No Change";
CTFeatureSelectorNameID = "-705";
}
);
},
{
CTFeatureTypeExclusive = 1;
CTFeatureTypeIdentifier = 10;
CTFeatureTypeName = "Vertical Position";
CTFeatureTypeNameID = "-1100";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorDefault = 1;
CTFeatureSelectorIdentifier = 0;
CTFeatureSelectorName = "Normal Vertical Position";
CTFeatureSelectorNameID = "-1101";
},
{
CTFeatureSelectorIdentifier = 1;
CTFeatureSelectorName = "Superiors/Superscripts";
CTFeatureSelectorNameID = "-1102";
},
{
CTFeatureSelectorIdentifier = 3;
CTFeatureSelectorName = Ordinals;
CTFeatureSelectorNameID = "-1104";
},
{
CTFeatureSelectorIdentifier = 4;
CTFeatureSelectorName = "Scientific Inferiors";
CTFeatureSelectorNameID = "-1105";
}
);
},
{
CTFeatureTypeIdentifier = 11;
CTFeatureTypeName = "Contextual Fractional Forms";
CTFeatureTypeNameID = "-1200";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorIdentifier = 2;
CTFeatureSelectorName = On;
CTFeatureSelectorNameID = "-1203";
}
);
},
{
CTFeatureTypeExclusive = 1;
CTFeatureTypeIdentifier = 17;
CTFeatureTypeName = Alternates;
CTFeatureTypeNameID = "-1800";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorDefault = 1;
CTFeatureSelectorIdentifier = 0;
CTFeatureSelectorName = "No Alternates";
CTFeatureSelectorNameID = "-1801";
},
{
CTFeatureSelectorIdentifier = 1;
CTFeatureSelectorName = "Alternate 1";
CTFeatureSelectorNameID = "-1802";
},
{
CTFeatureSelectorIdentifier = 2;
CTFeatureSelectorName = "Alternate 2";
CTFeatureSelectorNameID = "-1803";
},
{
CTFeatureSelectorIdentifier = 3;
CTFeatureSelectorName = "Alternate 3";
CTFeatureSelectorNameID = "-1804";
},
{
CTFeatureSelectorIdentifier = 4;
CTFeatureSelectorName = "Alternate 4";
CTFeatureSelectorNameID = "-1805";
},
{
CTFeatureSelectorIdentifier = 5;
CTFeatureSelectorName = "Alternate 5";
CTFeatureSelectorNameID = "-1806";
}
);
},
{
CTFeatureTypeExclusive = 1;
CTFeatureTypeIdentifier = 21;
CTFeatureTypeName = "Number Case";
CTFeatureTypeNameID = "-2200";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorIdentifier = 1;
CTFeatureSelectorName = "Lining Figures";
CTFeatureSelectorNameID = "-2202";
},
{
CTFeatureSelectorDefault = 1;
CTFeatureSelectorIdentifier = 2;
CTFeatureSelectorName = "No Change";
CTFeatureSelectorNameID = "-2203";
}
);
},
{
CTFeatureTypeExclusive = 1;
CTFeatureTypeIdentifier = 22;
CTFeatureTypeName = "Text Spacing";
CTFeatureTypeNameID = "-2300";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorDefault = 1;
CTFeatureSelectorIdentifier = 7;
CTFeatureSelectorName = "No Change";
CTFeatureSelectorNameID = "-2308";
},
{
CTFeatureSelectorIdentifier = 8;
CTFeatureSelectorName = "No Kerning";
CTFeatureSelectorNameID = "-2309";
}
);
},
{
CTFeatureTypeIdentifier = 33;
CTFeatureTypeName = "Case-Sensitive Layout";
CTFeatureTypeNameID = "-3400";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorIdentifier = 0;
CTFeatureSelectorName = "Capital Forms";
CTFeatureSelectorNameID = "-3401";
},
{
CTFeatureSelectorIdentifier = 2;
CTFeatureSelectorName = "Capital Spacing";
CTFeatureSelectorNameID = "-3403";
}
);
},
{
CTFeatureTypeIdentifier = 35;
CTFeatureTypeName = "Alternative Stylistic Sets";
CTFeatureTypeNameID = "-3600";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorIdentifier = 2;
CTFeatureSelectorName = "Stylistic Set 1";
CTFeatureSelectorNameID = "-3603";
},
{
CTFeatureSelectorIdentifier = 4;
CTFeatureSelectorName = "Stylistic Set 2";
CTFeatureSelectorNameID = "-3605";
},
{
CTFeatureSelectorIdentifier = 6;
CTFeatureSelectorName = "Stylistic Set 3";
CTFeatureSelectorNameID = "-3607";
}
);
},
{
CTFeatureTypeIdentifier = 36;
CTFeatureTypeName = "Contextual Alternates";
CTFeatureTypeNameID = "-3700";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorDefault = 1;
CTFeatureSelectorIdentifier = 0;
CTFeatureSelectorName = "Contextual Alternates";
CTFeatureSelectorNameID = "-3701";
}
);
}
)
上面是用下面的代码打印出来的:
var a = CTFontCopyFeatures(label.font)
println(a)
我正在尝试使用以下代码激活样式替代方案:
var newfont = UIFontDescriptor(name: "Pluto Sans Cond Medium", size: CGFloat(0.0))
label.font = UIFont(descriptor: newfont.fontDescriptorByAddingAttributes([UIFontFeatureTypeIdentifierKey: kStylisticAlternativesType, UIFontFeatureSelectorIdentifierKey: kStylisticAltOneOnSelector]), size: CGFloat(17))
我对 swift 和字体还很陌生,但据我所知,这应该会激活样式替代方案,我们将不胜感激任何帮助
最佳答案
这篇博文引导我找到解决方案:http://generic.cx/essays/font-descriptors/我最终像这样扩展了 uifont:
extension UIFont {
func activateAlternatives() -> UIFont {
let oDesc = self.fontDescriptor()
let features: [NSObject: AnyObject] = [
UIFontDescriptorFeatureSettingsAttribute: [
[
UIFontFeatureTypeIdentifierKey:
kStylisticAlternativesType,
UIFontFeatureSelectorIdentifierKey:
kStylisticAltOneOnSelector
]
,[
UIFontFeatureTypeIdentifierKey:
kStylisticAlternativesType,
UIFontFeatureSelectorIdentifierKey:
kStylisticAltTwoOnSelector
],
[
UIFontFeatureTypeIdentifierKey:
kStylisticAlternativesType,
UIFontFeatureSelectorIdentifierKey:
kStylisticAltThreeOnSelector
]
]
]
let newDesc = oDesc.fontDescriptorByAddingAttributes(features)
return UIFont(descriptor: newDesc, size: 0.0)
}
}
我认为我的问题实际上并不是代码错误,而是我需要使用所有三种替代方法来获得我期望的所有字形
关于ios - Swift 没有激活标签的风格替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32406306/