iOS如何实现Label的文字带白边围绕

2018-05-25  本文已影响266人  狂奔的胖蜗牛

最终效果如图所示:

image.png

实现代码:

很简单,写一个label的子类,重写drawText方法,在该方法内重新绘制文字即可。使用super.drawText方法时,会触发绘制。所以需要调用两次,分别绘制白边与文字。

class NewLable: UILabel {
    
    //修改该属性,即修改了轮廓的颜色
    var outLineColor = UIColor.white
    
    //重写该方法,修改lable文字的描绘方式
    override func drawText(in rect: CGRect) {
        //文字颜色
        let color = textColor
        
        //当前绘制环境
        let context = UIGraphicsGetCurrentContext()
        //设置宽度
        context?.setLineWidth(1)
        //连接处格式
        context?.setLineJoin(.round)
        //设置文字绘制模式为stroke
        context?.setTextDrawingMode(.stroke)
        //设置为白色
        textColor = outLineColor
        //调用父类该方法画文字
        super.drawText(in: rect)
        
        //重新设置绘制模式为fill
        context?.setTextDrawingMode(.fill)
        //设置原本颜色
        textColor = color
        //重新画文字
        super.drawText(in: rect)
    }
}

使用的代码:

    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .black
        
        let lab = NewLable(frame: view.frame)
        lab.text = "1234,这是一段文字。这是一段文字。这是一段文字。这是一段文字。这是一段文字。这是一段文字。这是一段文字。"
        lab.numberOfLines = 0
        lab.font = UIFont.systemFont(ofSize: 35)
        lab.textColor = .black
        view.addSubview(lab)
    }

结果如图:

image.png

举一反三可知,只要拥有drawText方法的控件,都可以重写该方法来达到类似目的。

上一篇下一篇

猜你喜欢

热点阅读