I\'ve made a CALayer
with an added CATextLayer
and the text comes out blurry. In the docs, they talk about \"sub-pixel antialiasing\", but that doesn\
Short answer — You need to set the contents scaling:
textLayer.contentsScale = [[UIScreen mainScreen] scale];
A while ago I learned that when you have custom drawing code, you have to check for the retina display and scale your graphics accordingly. UIKit
takes care of most of this, including font scaling.
Not so with CATextLayer.
My blurriness came from having a .zPosition
that was not zero, that is, I had a transform applied to my parent layer. By setting this to zero, the blurriness went away, and was replaced by serious pixelation.
After searching high and low, I found that you can set .contentsScale
for a CATextLayer
and you can set it to [[UIScreen mainScreen] scale]
to match the screen resolution. (I assume this works for non-retina, but I haven't checked - too tired)
After including this for my CATextLayer
the text became crisp. Note - it's not necessary for the parent layer.
And the blurriness? It comes back when you're rotating in 3D, but you don't notice it because the text starts out clear and while it's in motion, you can't tell.
Problem solved!