2015-09-04 29 views
0

我試圖啓用otf字體pluto-sans的文體替代品,但無論我做什麼,默認設置都是它使用的。Swift沒有激活標籤的文體替代品

當我看字體在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和fo相當新穎NTS但據我可以告訴這應該激活文體的選擇,任何幫助將不勝感激

回答

2

本博客文章使我一個解決方案: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) 
    } 
} 

我認爲我的問題並不是代碼錯誤,但我需要使用所有三種替代方法來獲得我期待的所有字形