How to change the text color in a CATextLayer in Swift

I want to change the text color of a CATextLayer.

This does not work

  • How to make custom keyboard only for my app in Swift?
  • Can I set image as a title to UINavigationBar?
  • BLE Peripheral disconnects when navigating to different ViewController
  • iOS - Converting time and date to user time zone
  • UIWebview gets stuck with the following message in console
  • Prevent Interface Builder from auto creating Constraints?
  • myTextLayer.textColor
    

    since there is no such property. I also got no response by setting the foreground color

    textLayer.foregroundColor = someColor.CGColor
    

    when the text layer is set up as follows

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

    I have seen the Objective-C question CATextLayer textcolor is always black but the answers there didn’t seem to make sense in my situation.

    Since I was able to solve my problem by reading the documentation, I am sharing the answer below.

    Solutions Collect From Internet About “How to change the text color in a CATextLayer in Swift”

    General Case

    To set the text color of a CATextLayer use

    myTextLayer.foregroundColor = UIColor.cyan.cgColor
    

    as in

    enter image description here

    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)
    

    If you don’t set the color, the default is white for both the background and the foreground.

    Using an Attributed String

    According to the documentation,

    The foregroundColor property is only used when the string property is not an NSAttributedString.

    That is why you were not able to change the color. You need to add the color to the attributed string in this case.

    // 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)
    

    which gives

    enter image description here