0

即使等效代码在 Swift 中工作,我在 Objective C 中显示分数时也遇到了问题。我一定遗漏了一些非常明显的东西??

SWIFT代码:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    //: Playground - noun: a place where people can play

    let pointSize = self.label.font.pointSize

    let systemFontDesc = UIFont.systemFont(ofSize: pointSize, weight: UIFontWeightLight).fontDescriptor

    let fractionFontDesc = systemFontDesc.addingAttributes(
        [
            UIFontDescriptorFeatureSettingsAttribute: [
                [
                    UIFontFeatureTypeIdentifierKey: kFractionsType,
                    UIFontFeatureSelectorIdentifierKey: kDiagonalFractionsSelector,
                    ], ]
        ] )

    print(fractionFontDesc)
    self.label.font = UIFont(descriptor: fractionFontDesc, size:pointSize)

    print("label.font.descriptor: \(self.label.font.fontDescriptor)")
}

结果:

迅速的结果

Objective C 中的等效代码

-(void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    CGFloat pointSize = _label.font.pointSize;

    UIFontDescriptor *systemFontDesc = [UIFont systemFontOfSize:pointSize weight:UIFontWeightLight].fontDescriptor;

    UIFontDescriptor *fractionDescriptor = [systemFontDesc fontDescriptorByAddingAttributes:@{ UIFontDescriptorFeatureSettingsAttribute : @{
                                                                                                       UIFontFeatureTypeIdentifierKey: @(11), // kFractionsType
                                                                                                       UIFontFeatureSelectorIdentifierKey: @(2)}}]; // kDiagonalFractionsSelector

    NSLog(@"%@\n\n", fractionDescriptor);

    UIFont *fracFont = [UIFont fontWithDescriptor:fractionDescriptor size:pointSize];

    NSLog(@"fracFont.fontDescriptor: %@\n\n", fracFont.fontDescriptor);

    [_label setFont: fracFont];

    NSLog(@"label.font.descriptor: %@\n\n", _label.font.fontDescriptor);
}

结果:

目标c输出

4

1 回答 1

3

问题是表达

fontDescriptorByAddingAttributes:@{
   UIFontDescriptorFeatureSettingsAttribute : @{

最后@{表明您的 UIFontDescriptorFeatureSettingsAttribute 是一个字典。那是错的。它需要是一个字典数组。(仔细看看你原来的 Swift 代码,你会发现确实如此。)

在我看来,你会做得更好,在一行中形成你的字典,在另一行中创建一个数组,然后fontDescriptorByAddingAttributes在第三行中调用。这样你就会清楚自己在做什么。现在,您只是将自己与所有这些嵌套文字混淆...

于 2017-02-16T15:54:30.157 回答