iOS CGContextAddArcToPoint 绘制带圆角的image图片

2017/03/16 iOS - 次.

iOS CGContextAddArcToPoint 绘制带圆角的image图片

作者:AustinKuture

摘要: 在开发中有时需要为UIButton在Normal与Highlighted两种状态下设置不同
     颜色的背景图片,这时又缺少现成的图片,则可以使用绘图方法绘制出所需要的图片,同
     时使用可以使用CGContextAddArcToPoint绘制圆角.
  • 如果项目中经常需要使用该方法时可以新建一个UIimage的分类,并将方法封装到其分类中.

  • 绘制方法的封装:

    //绘制指定颜色图片
    + (UIImage *)createImageWithColor:(UIColor *)color RectSize:(CGSize)rectSize 
                                                   CornerRadius:(float)cornerRadius{
    
        //直接绘制图像方法
    //    CGRect rect=CGRectMake(0.0f, 0.0f, 50.0f, 50.0f);
    //    UIGraphicsBeginImageContext(rect.size);
    //    CGContextRef context = UIGraphicsGetCurrentContext();
    //    CGContextSetFillColorWithColor(context, [color CGColor]);
    //    CGContextFillRect(context, rect);
    //    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    //    UIGraphicsEndImageContext();
    
        //带圆角图像的绘制方法
        UIImage *theImage;
        CGRect rect = CGRectMake(0.0f, 0.0f, rectSize.width, rectSize.height);
    
        UIGraphicsBeginImageContext(rect.size);   //开始画线
        [theImage drawInRect:CGRectMake(0, 0, rect.size.width, rect.size.height)];
        //获取上下文
        CGContextRef context = UIGraphicsGetCurrentContext();
        //边框大小
        CGContextSetLineWidth(context, 1);
        //边框颜色
        CGContextSetStrokeColorWithColor(context, COLORS_CLEAR.CGColor);
        //矩形填充颜色
        CGContextSetFillColorWithColor(context, [color CGColor]);
    
        /*
         *
         将要绘制的图像大小,分割成8个点,每两个点可以可以确定一条射线,每两条射线相交处可以设置圆弧.
         当前方法中先绘制的右下角,
         例如,将要绘制的圆角图片大小为:宽100,高100 圆角5,则需要的点分别为:
         A(100,10)
         B(100,100)
         C(90,100)
         D(0,100)
         E(0,90)
         F(0,0)
         G(10,0)
         H(100,0)
         *
        */
    
        //绘制图像及圆角
        CGContextMoveToPoint(context, rectSize.width, cornerRadius * 2);  // 开始坐标右边开始
        CGContextAddArcToPoint(context, rectSize.width, rectSize.height, rectSize.width - 10, rectSize.height, cornerRadius);  // 右下角
        CGContextAddArcToPoint(context, 0, rectSize.height, 0, rectSize.height - 10, cornerRadius); // 左下角
        CGContextAddArcToPoint(context, 0, 0, cornerRadius * 2, 0, cornerRadius); // 左上角
        CGContextAddArcToPoint(context, rectSize.width, 0, rectSize.width, cornerRadius * 2, cornerRadius); // 右上角
        CGContextDrawPath(context, kCGPathFillStroke); //根据当前坐标绘制路径
        theImage = UIGraphicsGetImageFromCurrentImageContext();//获取绘图
    
        //拉伸当前图像
        CGFloat h = theImage.size.height * 0.5;
        CGFloat w = theImage.size.width * 0.5;
        UIImage *rsizeImg = [theImage resizableImageWithCapInsets:UIEdgeInsetsMake(h, w, h, w) resizingMode:UIImageResizingModeStretch];
    
        return rsizeImg;
    }
    
  • 使用时方法:

    UIButton *testBtn = [[UIButton alloc]initWithFrame:CGRectMake(0,0, 85, 40)];
    [testBtn setImage:[UIImage createImageWithColor:[UIColor grarColor] RectSize:testBtn.size CornerRadius:5] forState:UIControlStateNormal];
    [testBtn setImage:[UIImage createImageWithColor:[UIColor yellowColor] RectSize:testBtn.size CornerRadius:5] forState:UIControlStateHighlighted]
    
  • 在实际使用时的效果:

img

Search

    Table of Contents