Cómo cambiar el color del text en un CATextLayer en Swift

Quiero cambiar el color del text de un CATextLayer.

Esto no funciona

myTextLayer.textColor 

ya que no hay tal propiedad. Tampoco obtuve respuesta al configurar el color de primer plano.

 textLayer.foregroundColor = someColor.CGColor 

cuando la capa de text se configura de la siguiente manera

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

He visto la pregunta Objective-C CATextLayer textcolor siempre es negro, pero las respuestas allí no parecían tener sentido en mi situación.

Como pude resolver mi problema leyendo la documentation , estoy compartiendo la respuesta a continuación.

Caso general

Para configurar el color del text de un uso de CATextLayer

 myTextLayer.foregroundColor = UIColor.cyan.cgColor 

como en

introduzca la descripción de la imagen aquí

 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) 

Si no establece el color, el valor pnetworkingeterminado es blanco tanto para el background como para el primer plano.

Usando una cadena atribuida

De acuerdo con la documentation ,

La propiedad foregroundColor solo se usa cuando la propiedad string no es una NSAttributedString .

Es por eso que no pudiste cambiar el color. Debe agregar el color a la cadena atribuida en este caso.

 // Attributed string let myAttributes = [ NSFontAttributeName: UIFont(name: "Chalkduster", size: 30.0)! , // font NSForegroundColorAttributeName: 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) 

lo que da

introduzca la descripción de la imagen aquí