NSString *labelText = @"foobar";
[textLayer setString:labelText];
Это должно быть запущено в главном потоке, поэтому я использую это:
NSString *labelText = @"foobar";
[textLayer performSelector:@selector(setString:) withObject:labelText waitUntilDone:YES];
И если вы часто обновляетесь, вы должны отключить анимацию между изменениями текста:
NSString *labelText = @"foobar";
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
[textLayer performSelector:@selector(setString:) withObject:labelText waitUntilDone:YES];
[CATransaction commit];