Search code examples
iphonequartz-2d

returning the correct height of custom drawing text method


I have a few functions that I'm using to draw different type of text. For example:

- (CGFloat)drawInformation:(CGContextRef)c withLeftCol:(NSArray *)leftCol rightcol:(NSArray *)rightCol atPoint:(CGPoint)point withLineSpacing:(CGFloat)lineSpacing {
    CGContextSetStrokeColorWithColor(c, [UIColor blackColor].CGColor);
    CGFloat fontSize = 16.0;
    UIFont *pFont = [UIFont fontWithName:@"Arial-BoldMT" size:fontSize];

    CGFloat yOffset = 0;
    for (NSString *leftColStr in leftCol) {
        [leftColStr drawAtPoint:CGPointMake(point.x, point.y + yOffset) withFont:pFont];
        yOffset += lineSpacing;
    }

    yOffset = 0;
    for (NSString *rightColStr in rightCol) {
        [rightColStr drawAtPoint:CGPointMake(rtStart, point.y + yOffset) withFont:pFont];
        yOffset += lineSpacing;
    }
    return [leftCol count] > [rightCol count] ? [leftCol count] * (fontSize + lineSpacing) : [rightCol count] * (fontSize + lineSpacing);
}

I didn't include the whole method, but this is the gist of it. I basically take in an array of text, and draw them in two columns. I want to return the height of the area so I know how large it is and can draw the next piece of text below it.

One thing I found is even though I set my fontSize = 16, if I do a [@"text" sizeWithFont:pFont], I actually get 18 or something. As you can see, I add in some lineSpacing as well. So what I'm wondering is if I'm returning the correct amount in this case, and also, if I should be using the fontSize, or the [@"text" sizeWithFont:pFont].height in my return statement. In its current state, when I need to draw my next block of text at the new point, it is pretty off, like 100 points, and I'm not sure why there is such a discrepancy. Thanks!


Solution

  • Create separate variables for the y offset in your first loop and the y offset in your second loop. Then return MAX(yOffsetLeftCol, yOffsetRightCol).