自定义TextField

时间:2019-09-05 12:08:26

标签: swift label core-graphics

我正在尝试构建一个科学的计算器应用程序。但是,简单标签不符合我的需求,因为它无法显示例如整数或分数。所以我想开发自己的自定义标签类。

我已经尝试使用Core Graphics绘制数字和符号,但是我真的无法弄清楚如何绘制闪烁的游标。您对我的问题有任何建议,还是应该使用与CG不同的方法?最好的问候!

func drawText(text: String) {
        let renderer = UIGraphicsImageRenderer(size: CGSize(width: 343, height: 306))
        let image = renderer.image { ctx in
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.alignment = .left
            let attrs = [NSAttributedString.Key.font: UIFont(name: "HelveticaNeue-Thin", size: 36)!, NSAttributedString.Key.paragraphStyle: paragraphStyle]
            text.draw(with: CGRect(x: 0, y: 0, width: 343, height: 306), options: .usesLineFragmentOrigin, attributes: attrs, context: nil)
        }
        imageView.image = image
    }

func drawCursor() {
        // Don't know how to continue here
}

1 个答案:

答案 0 :(得分:1)

您只能使用unicode符号来表示诸如积分之类的东西,下面是绘制积分符号的代码。

let textField = UITextField()
textField.text = "\u{222B}"

您还可以通过简单的Google搜索来查找所有其他字符的Unicode。

关于图形光标,您可以使用计时器来闪烁效果。下面的代码可以帮助您获得一些逻辑,

let textField = UITextField()
let text = "SomeText"
var count = 0
let timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { (_) in
    var displayText = ""
    if count % 2 == 0 {
        displayText = "\(text)|"
    } else {
        displayText = text
    }

    textField.text = displayText
    print(textField.text ?? "")

    count += 1
} 

如果要在文本的中间显示光标,则需要跟踪其位置并将其插入中间。

编辑:-而不是在Internet上搜索unicode(按照@rmaddy的建议),您只需转到“编辑”菜单->“表情符号和符号”即可获取所需的符号。