UI开发中, 很多时候需要用到圆角图片或者圆形图片。可以使用下面方法,从其他形状图片获得:
static void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth, float ovalHeight)
{
float fw, fh;
if (ovalWidth == 0 || ovalHeight == 0) {
CGContextAddRect(context, rect);
return;
}
CGContextSaveGState(context);
CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect));
CGContextScaleCTM(context, ovalWidth, ovalHeight);
fw = CGRectGetWidth(rect) / ovalWidth;
fh = CGRectGetHeight(rect) / ovalHeight;
CGContextMoveToPoint(context, fw, fh/2); // Start at lower right corner
CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1); // Top right corner
CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1); // Top left corner
CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1); // Lower left corner
CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); // Back to lower right
CGContextClosePath(context);
CGContextRestoreGState(context);
}
/**
* @brief 创建圆角图片
*
* @param size 优化后的图片大小
* @param radius 圆角半径
*
* @return 返回圆角图片
*/
- (id)roundCornerImageWithsize:(CGSize)size radius:(float)radius
{
// the size of CGContextRef
int w = size.width;
int h = size.height;
CGRect rect = CGRectMake(0, 0, w, h);
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0)
{
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0); // 0.0 for scale means "scale for device's main screen".
}
#else
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0)
{
UIGraphicsBeginImageContext([image size]);
}
#endif
CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextBeginPath(contextRef);
addRoundedRectToPath(contextRef, rect, radius, radius);
CGContextClosePath(contextRef);
CGContextClip(contextRef);
[self drawInRect:rect];
UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newPic;
}
使用:
UIImage * image = [UIImage imageNamed:@"image.png"];
// 取出图片长边
CGFloat len = image.size.height > image.size.width ? image.size.height : image.size.width;
// 设置图片拉伸填充显示, 圆角半径为边长一半, 即得到圆形图片
UIImage * roundCornerImage = [image roundCornerImageWithsize:CGSizeMake(len, len) radius:len * 0.5];