I have this code that creates a CATextLayer and draws it onto a UIView:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
CGRect viewRect = CGRectMake(50.0f, 50.0f, 345.0f, 120.0f);
CATextLayer *textLayer = [CATextLayer layer];
textLayer.contentsScale = [[UIScreen mainScreen] scale];
textLayer.wrapped = YES;
textLayer.truncationMode = kCATruncationNone;
UIFont *font = [UIFont fontWithName:@"SnellRoundhand" size:20.0f];
textLayer.string = @"Lorem Lipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.";
textLayer.alignmentMode = kCAAlignmentLeft;
textLayer.fontSize = font.pointSize;
CTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)font.fontName, font.pointSize, nil);
textLayer.font = fontRef;
CFRelease(fontRef);
textLayer.backgroundColor = [[UIColor lightGrayColor] CGColor];
textLayer.foregroundColor = [[UIColor blackColor] CGColor];
textLayer.frame = viewRect;
UIGraphicsBeginImageContextWithOptions(textLayer.frame.size, NO, 0);
[textLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *textImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *textImageView = [[UIImageView alloc] initWithImage:textImage];
textImageView.frame = viewRect;
[self.view addSubview:textImageView];
}
Unfortunately, some of the characters are cut off when rendering the view. In the example I posted, the 'L' at the beginning is missing its leftmost pixels, and the 'd' at the end of the second is missing it rightmost pixels.
Is there a way to prevent this cutoff from happening, without changing the way the text is wrapped?
Instead of using CATextLayer's default behavior, I wrote a function that takes data from a CATextLayer and manually draw it into a CGContext. I added a parameter for padding to take care of the cutoff issue.