如何用图像绘制一个完整的圆圈

时间:2013-04-23 09:33:55

标签: iphone ios xcode core-graphics geometry

我对核心图形很新。我需要绘制一个完整的圆圈。我该怎么办呢?我目前有一个蒙面圈。

我提到this example

enter image description here

//Use the draw rect to draw the Background, the Circle and the Handle 
-(void)drawRect:(CGRect)rect{

    [super drawRect:rect];

    CGContextRef ctx = UIGraphicsGetCurrentContext();

/** Draw the Background **/

    //Create the path
    CGContextAddArc(ctx, self.frame.size.width/2, self.frame.size.height/2, radius, 0, M_PI *2, 0);

//    CGContextFillEllipseInRect(ctx, CGRectMake(self.frame.size.height/2, self.frame.size.width/2, 100, 100));
//    CGContextSetRGBFillColor(ctx, 0.5, 0.5, 0.5, 1.0);


    //Set the stroke color to black
    [[UIColor greenColor]setStroke];

    //Define line width and cap
    CGContextSetLineWidth(ctx, TB_BACKGROUND_WIDTH);
    CGContextSetLineCap(ctx, kCGLineCapButt);

    CGContextDrawPath(ctx, kCGPathStroke);

    UIGraphicsBeginImageContext(CGSizeMake(TB_SLIDER_SIZE,TB_SLIDER_SIZE));
    CGContextRef imageCtx = UIGraphicsGetCurrentContext();

    CGContextAddArc(imageCtx, self.frame.size.width/2  , self.frame.size.height/2, radius, 0, ToRad(self.self.startAngle), 0);

    [[UIColor redColor]set];

    CGContextSetLineWidth(imageCtx, TB_LINE_WIDTH);
    CGContextDrawPath(imageCtx, kCGPathStroke);

    //save the context content into the image mask
    CGImageRef mask = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext());
    UIGraphicsEndImageContext();
    CGContextSaveGState(ctx);
    CGContextClipToMask(ctx, self.bounds, mask);
    CGImageRelease(mask);

    //list of components
    CGFloat components[8] = {
        0.0, 0.0, 1.0, 1.0,     // Start color - Blue
        1.0, 1.0, 1.0, 1.0 };   // End color - Violet

    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, components, NULL, 2);
    CGColorSpaceRelease(baseSpace), baseSpace = NULL;

    //Gradient direction
    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

    //Draw the gradient
    CGContextDrawLinearGradient(ctx, gradient, startPoint, endPoint, 0);
    CGGradientRelease(gradient), gradient = NULL;

    CGContextRestoreGState(ctx);

/** Draw the handle **/
    [self drawTheHandle:ctx];

}

2 个答案:

答案 0 :(得分:1)

CGContextDrawPath(imageCtx, kCGPathFill);

答案 1 :(得分:0)

将背景宽度和线宽设为140,它可以正常工作!!

#define TB_BACKGROUND_WIDTH 140    //The width of the dark background
#define TB_LINE_WIDTH 140          //The width of the active area (the gradient) and the width of the handle