Sometimes you might need to draw text instead of just using a comfortable UILabel. For example if you want to show it a a specific angle. This takes a lot of code, but once you understand it, it’s just copy and paste.
- (void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSetRGBFillColor(ctx, 1, 0, 0, 1); // inside red CGContextSetRGBStrokeColor(ctx, 0, 1, 0, 1); // outline green double text_angle = -M_PI/4.0; // 45 Degrees counterclockwise CGAffineTransform xform = CGAffineTransformMake( cos(text_angle), sin(text_angle), sin(text_angle), -cos(text_angle), 0.0, 0.0); CGContextSetTextMatrix(ctx, xform); CGContextSelectFont(ctx, "Helvetica", 20.f, kCGEncodingMacRoman); CGContextSetTextDrawingMode(ctx, kCGTextFillStroke); CGContextShowTextAtPoint(ctx, 100, 100, "Test Text", 9); } |
Of special importance is the application of a tranformation matrix via CGContextSetTextMatrix. Without it, your text will be drawn upside down. This is a feature, not a bug, because internally the iPhone still wishes that (0,0) is in the lower lefthand corner, but for most UIView-releated uses this is the “right way around”, i.e. (0,0) in the upper lefthand corner.
Categories: Recipes