2017-02-16 43 views
0

即使相應的代碼在Swift中工作,我也無法在Objective C中顯示分數。我必須失去一些非常明顯的東西?在目標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)") 
} 

結果:

swift result

在目標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); 
} 

結果:

objective c output

回答

3

的問題是表達

fontDescriptorByAddingAttributes:@{ 
    UIFontDescriptorFeatureSettingsAttribute : @{ 

這最後@{表明您UIFontDescriptorFeatureSettingsAttribute是一本字典。那是錯的。它需要是一個數組字典。 (仔細看看你原來的Swift代碼,你會發現這是如此。)

在我看來,在一行中形成你的字典,在另一行中創建一個數組,並且在第三行中撥打fontDescriptorByAddingAttributes。這樣你就可以清楚你在做什麼。現在,你只是混淆了所有那些嵌套的字面問題...

+0

這是一個並行的工作示例:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/d649f8bf5dee25a35a72c478d2902896328ca354 /iOS7bookExamples/bk2ch10p499fontDescriptor2/ch23p670font1dynamicType/ViewController.m – matt

+0

謝謝!我永遠都看不到。我已經爲您的示例添加了針對未來Google Analytics的分數工作代碼。 – Lewis42