tags:

views:

302

answers:

2

Must I also do all this crazy coordinate system conversion stuff here, or is an UILabel different from an UIImageView drawing in -drawRect: ?

There's a method called - (void)drawTextInRect:(CGRect)rect for that.

BUT the documentation says: "You should not call this method directly. This method should only be overridden by subclasses that want to modify the default drawing behavior for the label’s text."

So? How to draw it then in -drawRect:?

+2  A: 

If you perform custom drawing in your view you must not draw UILabel or another UI element but rather draw text itself. NSString has several methods for drawing in current context (look at NSString's UIKit extension docs for more methods):

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font
- (CGSize)drawAtPoint:(CGPoint)point withFont:(UIFont *)font
Vladimir
+3  A: 

UILabel is different in that you don't need to manually draw text to alter the way it is presented. Subclassing UILabel and overriding -drawTextInRect: is the quickest way to alter the way a UILabel is rendered. For example,

- (void)drawTextInRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetShadowWithColor( context, shadowOffset, shadowRadius, [shadowColor CGColor] );   
    [super drawTextInRect:rect];
}

will add a shadow with a specific offset, radius, and color (as a UIColor instance) to any text that you draw in that UILabel. For an example of this in action, see a project I put together for a recent class.

However, if what you are looking to do is just draw text within another view, Vladimir's answer is the way to go.

Brad Larson
unfortunately, doing it Vladimir's way won't work very well. UILabel has some intelligent logic to compute the shrinked size of text when it doesnt fit the label. See my other questions, I wasn't able to reproduce that logic due to bugs in the methods provided. But thanks anyways.
dontWatchMyProfile
btw, your link seems broken
dontWatchMyProfile
@mystify - Sorry, minor web server hiccup. Try it now.
Brad Larson