Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't draw in UITableViewCell's drawRect

I'm having trouble drawing in the drawRect method of my custom UITableViewCell. Here is the code I am using

- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx  = UIGraphicsGetCurrentContext();
    CGPoint origin    = _faceView.frame.origin;
    CGFloat width     = _faceView.frame.size.width;
    CGFloat height    = _faceView.frame.size.height;
    CGFloat border    = 2.0f;


    CGPoint startPt   = CGPointMake(origin.x + width/2, self.frame.size.height);
    CGContextBeginPath(ctx);
    CGContextMoveToPoint(ctx, startPt.x, startPt.y);

    CGPoint basePt    = CGPointMake(startPt.x, origin.y - height - border);
    CGContextAddLineToPoint(ctx, basePt.x, basePt.y);

    CGRect circleRect = CGRectMake(origin.x - border, origin.y - border, width + 2 * border, height + 2 * border);
    CGContextAddEllipseInRect(ctx, circleRect);

    UIColor *color = [UIColor redColor];
    CGContextSetFillColorWithColor(ctx, color.CGColor);
    CGContextSetStrokeColorWithColor(ctx, color.CGColor);
    CGContextSetLineWidth(ctx, 1.0f);

    CGContextDrawPath(ctx, kCGPathFillStroke);
}

I've debugged to make sure that all of the numeric values make sense and it appears that they do. Can't really find out why nothing is being drawn on screen.

For what its worth, this is a cell defined in a nib as well. And i'm building with the iOS 7 sdk.

Any ideas?

tahnks

like image 393
Sean Danzeiser Avatar asked Sep 18 '13 23:09

Sean Danzeiser


3 Answers

Try set backgroungcolor property to transparent color

self.backgroundColor = [UIColor clearColor]
like image 69
Antaresm Avatar answered Oct 31 '22 11:10

Antaresm


You probably shouldn't do this in UITableViewCell's own drawRect. Instead, create a custom UIView and add it as a subview.

See also this answer.

like image 42
NRitH Avatar answered Oct 31 '22 10:10

NRitH


You have to set

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
       .....
       [cell setNeedsDisplay];
       return cell;
}
like image 42
Max Avatar answered Oct 31 '22 10:10

Max