4

I have a UITableViewCell subclass with a UIImage as property.
I want to draw the image in drawRect, and to be efficient because this is a table view cell.

I know how to draw the image as it is:

-(void)drawRect:(CGRect)aRect 
{
    CGRect rect = self.bounds;

    [self.image drawInRect:rect];
} 

But how can I draw the image with rounded corners, and stay efficient?

BTW I don't want to use UIImageView and then set the layer corner radius because it seams to hurt performance.

Eyal
  • 10,777
  • 18
  • 78
  • 130

1 Answers1

16

You need to create a clipping path:

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGPathRef clippath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius].CGPath;
CGContextAddPath(ctx, clippath);
CGContextClip(ctx);
[self.image drawInRect:rect];
CGContextRestoreGState(ctx);
Svein Halvor Halvorsen
  • 2,474
  • 1
  • 16
  • 14