Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 自定义文本字段_Swift_Label_Core Graphics - Fatal编程技术网

Swift 自定义文本字段

Swift 自定义文本字段,swift,label,core-graphics,Swift,Label,Core Graphics,我正在尝试建立一个科学计算器应用程序。然而,这个简单的标签不适合我的需要,因为它不能显示像整数或分数这样的符号。所以我想开发自己的自定义标签类 我已经尝试过使用核心图形绘制数字和符号,但我真的不知道如何绘制闪烁的光标。你对我的问题有什么建议吗,或者我应该使用不同于CG的东西吗?致以最良好的祝愿 func drawText(text: String) { let renderer = UIGraphicsImageRenderer(size: CGSize(width: 343,

我正在尝试建立一个科学计算器应用程序。然而,这个简单的标签不适合我的需要,因为它不能显示像整数或分数这样的符号。所以我想开发自己的自定义标签类

我已经尝试过使用核心图形绘制数字和符号,但我真的不知道如何绘制闪烁的光标。你对我的问题有什么建议吗,或者我应该使用不同于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
}

您可以使用unicode符号来表示积分之类的东西,下面是绘制积分符号的代码

let textField = UITextField()
textField.text = "\u{222B}"
您还可以通过简单的谷歌搜索找到所有其他字符的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所建议的),只需转到“编辑菜单->表情符号”即可获得所需的符号。

直接使用字符,而不必使用难以阅读的
“\u{222B}”
<代码>”∫"。我想我们在mac键盘上没有这个符号。但是正如你所说,我们可以从互联网上复制它。不需要从互联网上复制它。在任何macOS程序中,单击“编辑”菜单并选择“表情符号和符号”。现在你可以在代码中找到并使用任何Unicode字符。哦,太好了,谢谢。我将把这个添加到答案中。