我有在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?
似乎没有遵守这些属性答案 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])
}