ios - Swift 没有激活标签的风格替代品

标签 ios swift fonts

我正在尝试为 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/

相关文章:

ios - Swift UITableView 响应用户点击单元格时的响应

ios - 带有条件 ViewController 的 Storyboard

ios - 每次我打开项目时,Xcode 8.2.1意外退出

ios - 将 MKMapSnapshotter 作为 NSData 保存在内存中 - Swift

ios - 在 Swift 中将 AVDepthData 从 PixelBuffer 映射到 RGBA

iphone - iPhone 和 Mac/PC 上 html 表格的字体大小不同

objective-c - 根据标签设置 UIImage

ios - 不透明度和模糊

css - chrome 中 textarea 的默认字体样式是什么? (文本输入 vs textarea "size"的文本)

android - 如何在 Android Studio 中更改文本的字体?