2015-09-11 35 views
0

使我有繪製的CALayer內的文本代碼:打印輸出的的iOS String.drawAtPoint總是在相同尺寸

override func drawInContext(ctx: CGContext) { 
     ... 

     // text 
     print ("font attributes: \(slider.thumbTextFontDescriptor.fontAttributes())") 
     if text != lastText { 
      lastTextSize = text.sizeWithAttributes(slider.thumbTextFontDescriptor.fontAttributes()) 
      lastText = text 
     } 

     let textPoint = CGPointMake(CGRectGetMidX(thumbFrame) - lastTextSize.width/2.0,CGRectGetMidY(thumbFrame) - lastTextSize.height/2.0) 
     UIGraphicsPushContext(ctx) 
     CGContextSetFillColorWithColor(ctx, UIColor.blackColor().CGColor) 
     text.drawAtPoint(textPoint, withAttributes: slider.thumbTextFontDescriptor.fontAttributes()) 
     UIGraphicsPopContext() 

} 

例如:

font attributes: ["NSFontNameAttribute": HelveticaNeue-Light, "NSFontSizeAttribute": 60] 

字體描述符被初始化爲

if let font = UIFont(name: "HelveticaNeue-Light", size: 60.0) { 
    thumbTextFontDescriptor = font.fontDescriptor() 
} 

我的症狀是:文本總是以相同的大小繪製,可能是相同的字體。

我可以將字體大小設置爲10.0或60.0,渲染結果始終相同。

當我註釋掉「text.drawAtPoint ...」這一行時,沒有文字被渲染,所以我確定這是渲染的代碼。

這是iOS的9通用汽車的XCode 7 GM

任何想法,爲什麼屬性似乎不是由text.drawAtPoint得到尊重?

+0

嘗試使用'UITextAttributeFont'鍵,並在'UIFont'作爲傳遞的價值。 – rmaddy

+0

我的打印字體屬性:[「NSFontNameAttribute」:HelveticaNeue-Light,「UITextAttributeFont」: font-family:「HelveticaNeue-Light」; font-weight:normal; font-style:normal; font-size:30.00pt,「NSFontSizeAttribute」:30] - 我看不出有什麼區別。 –

+0

你只需要一個屬性。擺脫名稱和大小的。 – rmaddy

回答

1

我認爲這個問題是

slider.thumbTextFontDescriptor.fontAttributes()

沒有返回正確的字典爲drawAtPoint:方法所需。我只是想你的代碼下面的簡化版本,它使用的是舊的Xcode的工作確定(6.3)

let text = "test" 

if let font = UIFont(name: "HelveticaNeue-Light", size: 60.0) { 
    let textPoint = CGPoint(x: 100, y: 100) 
    text.drawAtPoint(textPoint, withAttributes:[NSFontAttributeName:font]) 

} 
+0

就是這樣。我認爲這些字典是爲了一起工作而設計的。 –