iOS String.drawAtPoint始终呈现相同的大小

时间:2015-09-11 21:46:15

标签: ios swift fonts ios9

我有在CALayer中绘制文本的代码:

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 GM,XCode 7 GM

知道为什么text.drawAtPoint?

似乎没有遵守这些属性

1 个答案:

答案 0 :(得分: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])

}