UILabel now supports attributed string. So you can do something similar to following
int lengthOfTextToColor = 0;
NSMutableAttributedString *textString = [[NSMutableAttributedString alloc] initWithString:@"I think you are making a karaoke app"];
-(void)colorChangeTimer:(NSTimer *)timer {
lengthOfTextToColor ++;
NSRange range = NSMakeRange(0, lengthOfTextToColor);
NSDictionary *colorAttribute = @{NSForegroundColorAttributeName:[UIColor blueColor]};
[textString setAttributes: colorAttribute range:range];
self.label.attributedText = textString;
}
But attributed string has its limitations.
If you are looking to implement really fancy text, pull up your socks and check Text Programming Guide and CoreText Framework. You can find many tutorials for Core Text