如何使用CoreText替换Swift中的UILabel? [英] How to use CoreText to replace UILabel in Swift?

查看:197
本文介绍了如何使用CoreText替换Swift中的UILabel?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前我正在使用UILabel在屏幕上显示文字:

Currently I am using UILabel to put texts on the screen:

var label = UILabel()
view.addSubView(label)
label.backgroundColor = UIColor.whiteColor()
label.numberOfLines = 2
label.font = UIFont.systemFontOfSize(20, weight: UIFontWeightMedium)
label.frame = CGRectMake(0, 0, 100, 50)
label.text = "Hi, this is some text..."

如何使用CoreText替换Swift中的上述内容?

How to use CoreText to replace the above in Swift?

推荐答案

以下代码解决我的问题:

Following code solved my question:

override func drawRect(rect: CGRect) {
    super.drawRect(rect)

    let  context  = UIGraphicsGetCurrentContext()

    // Flip the coordinate system
    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
    CGContextTranslateCTM(context, 0, self.bounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    let path = CGPathCreateMutable()
    CGPathAddRect(path, nil, self.bounds)

    let str = NSMutableAttributedString(string: "some text goes here...")

    // set font color
    str.addAttribute(kCTForegroundColorAttributeName as String, value:UIColor.blackColor() , range: NSMakeRange(0,str.length))
    // set font name & size
    let fontRef = UIFont.systemFontOfSize(20, weight: UIFontWeightMedium)
    str.addAttribute(kCTFontAttributeName as String, value: fontRef, range:NSMakeRange(0, str.length))

    let frameSetter = CTFramesetterCreateWithAttributedString(str)
    let ctFrame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0,str.length), path, nil)

    CTFrameDraw(ctFrame, context!)
}

这篇关于如何使用CoreText替换Swift中的UILabel?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆