6

我想更改 CATextLayer 的文本颜色。

这不起作用

myTextLayer.textColor

因为没有这样的财产。我也没有通过设置前景色得到回应

textLayer.foregroundColor = someColor.CGColor

当文字层设置如下

let myAttribute = [ NSFontAttributeName: UIFont(name: mongolFontName, size: fontSize )! ]
let attrString = NSMutableAttributedString(string: textLayer.displayString, attributes: myAttribute )
textLayer.frame = myFrame
textLayer.string = attrString

我已经看到了 Objective-C 问题CATextLayer textcolor 总是黑色的,但那里的答案在我的情况下似乎没有意义。

因为我能够通过阅读文档来解决我的问题,所以我在下面分享答案。

4

2 回答 2

13

一般情况

要设置 CATextLayer 的文本颜色,请使用

myTextLayer.foregroundColor = UIColor.cyan.cgColor

如在

在此处输入图像描述

let myTextLayer = CATextLayer()
myTextLayer.string = "My text"
myTextLayer.backgroundColor = UIColor.blue.cgColor
myTextLayer.foregroundColor = UIColor.cyan.cgColor
myTextLayer.frame = myView.bounds
myView.layer.addSublayer(myTextLayer)

如果不设置颜色,则背景和前景默认为白色。

使用属性字符串

根据文件

foregroundColor属性仅在string属性不是NSAttributedString.

这就是为什么您无法更改颜色的原因。在这种情况下,您需要将颜色添加到属性字符串。

// Attributed string
let myAttributes = [
    NSAttributedStringKey.font: UIFont(name: "Chalkduster", size: 30.0)! , // font
    NSAttributedStringKey.foregroundColor: UIColor.cyan                    // text color
]
let myAttributedString = NSAttributedString(string: "My text", attributes: myAttributes )

// Text layer
let myTextLayer = CATextLayer()
myTextLayer.string = myAttributedString
myTextLayer.backgroundColor = UIColor.blue.cgColor
//myTextLayer.foregroundColor = UIColor.cyan.cgColor // no effect
myTextLayer.frame = myView.bounds
myView.layer.addSublayer(myTextLayer)

这使

在此处输入图像描述

答案更新为 Swift 4

于 2016-08-08T17:22:47.493 回答
2

Swift 3 解决方案(但与其他语言相同的问题)。

秘诀在于添加titleLayer.display()。

let titleLayer = CATextLayer()
titleLayer.string = "My text"
titleLayer.frame = CGRect(x:0, y:O, width:UIScreen.main.bounds.width, height:UIScreen.main.bounds.width.height)
titleLayer.font = CGFont("HelveticaNeue-UltraLight" as CFString)!
titleLayer.fontSize = 100
titleLayer.alignmentMode = kCAAlignmentCenter
titleLayer.backgroundColor = UIColor.blue.cgColor
titleLayer.foregroundColor = UIColor.cyan.cgColor
titleLayer.display()
于 2017-11-05T14:54:10.287 回答