jan
jan

Reputation: 893

Drawing a solid line in a UITableViewCell

I don't know anything about graphics or drawing so I assume that's why I can't figure out what to look for to solve this.

Here's what I got in my UITableViewCell's drawRect

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(ctx, 0.0, 0.0, 0.0, 1.0);
    CGContextSetLineWidth(ctx, 0.25);

    for (int i = 0; i < [columns count]; i++) {
        CGFloat f = [((NSNumber*) [columns objectAtIndex:i]) floatValue];
        CGContextMoveToPoint(ctx, f, 0);
        CGContextAddLineToPoint(ctx, f, self.bounds.size.height);
    }
    CGContextStrokePath(ctx);
}

I think this should be drawing a black line but the line is gray, blending with what's in the background. How can I draw a solid line that is not influenced by a background image? I've tried all the blend mode's thinking maybe one would be like a blend mode none, because I don't want any blending, but all draw lines that blend in some way with the background.

Upvotes: 0

Views: 1699

Answers (3)

Jake Dahl
Jake Dahl

Reputation: 169

UIView *line = [[UIView     alloc]initWithFrame:CGRectMake(100,0,1,44)];
line.backgroundColor = [UIColor     colorWithRed:244.0f/255.0f green:244.0f/255.0f     blue:244.0f/255.0f alpha:1];

[cell addSubview:line];

Upvotes: 0

tc.
tc.

Reputation: 33592

Two problems: * You're drawing a black line that's 0.25 pixels (or 0.5 pixels on iPhone 4) wide; antialiasing will make this appear semi-transparent. Try setting the line width to 1. * If f is an integer, then the center of the line is aligned on a pixel boundary (you want it on a pixel center). Try adding 0.5f.

If you want thinner lines on iPhone 4, then check if self.layer.scale == 2 and if so, set the line width to 0.5 and add 0.25f.

Alternatively, set the fill colour and call CGContextFillRect() instead, which means you don't have to worry about pixel centers.

Upvotes: 1

Cory Kilger
Cory Kilger

Reputation: 13044

You can try turning off antialiasing using CGContextSetShouldAntialias(). Also, 0.25 seems like a pretty thin line. Setting it to 1.0 might give you what you're looking for.

Upvotes: 3

Related Questions