Как изменить цвет текста в CATextLayer в Swift

Я хочу изменить цвет текста 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-CCATextLayer textcolor всегда черный но ответы там не имели смысла в моей ситуации.

Так как я смог решить мою проблему, прочитавдокументацияЯ делюсь ответом ниже.

Ответы на вопрос(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()
 Brainstorm Technolabs29 мая 2018 г., 16:43
Спасибо чувак. Вы сделали мой день....
 Ewan Mellor05 июн. 2019 г., 21:28
Из документации CATextLayer.display (): «Не вызывайте этот метод напрямую».developer.apple.com/documentation/quartzcore/calayer/...
Решение Вопроса
Общий случай

используйте

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

Ваш ответ на вопрос