2016-08-31 102 views
-1

下面的代碼在路徑末端繪製圓角(綠色)。但是,不是一開始。可以做些什麼,以便我也可以在起始處有圓角(紅色開始的地方)。它在開始時並不完美。CGRectAddArc的圓角

enter image description here

-(void)drawRect:(CGRect)rect{ 


    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGFloat arcStartAngle = M_PI; 
    CGFloat arcEndAngle = 2 * M_PI; 

    CGPoint startPoint = CGPointMake(0,CGRectGetMidY(rect)); 
    CGPoint endPoint = CGPointMake(CGRectGetMaxX(rect),CGRectGetMidY(rect)); 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    CGFloat colors[] = 
    { 
     1.0, 0.0, 0.0, 1.0, 
     0.0, 1.0, 0.0, 1.0 
    }; 

    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, 2); 

    CGColorSpaceRelease(colorSpace); 



    CGMutablePathRef arc = CGPathCreateMutable(); 

    CGPathMoveToPoint(arc, NULL, startPoint.x, startPoint.y); 


    CGPoint arcCenter = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); 
    CGFloat radius = CGRectGetMidX(rect); 

    CGPathAddArc(arc, NULL, arcCenter.x, arcCenter.y, radius-5.0, 
       arcStartAngle, arcEndAngle, NO); 



    CGPathRef strokedArc = CGPathCreateCopyByStrokingPath(arc, NULL, 10.0f, 
                  kCGLineCapRound, kCGLineJoinRound, 10.0f); 


    CGContextSaveGState(context); 

    CGContextAddPath(context, strokedArc); 
    CGContextClip(context); 

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0); 

    CGContextDrawPath(context, kCGPathFillStroke); 

    CGGradientRelease(gradient); 
    CGContextRestoreGState(context); 


} 
+0

您的繪圖中沒有角落,是否圓整。你能更具體地說明問題是什麼嗎? – matt

回答

1

我一直在研究你的問題,這是我所發現的。 您的問題是關係到你的路徑開始點你有

CGPathMoveToPoint(arc, NULL, startPoint.x, startPoint.y); 

但你的例子,你需要開始startPoint.x + 5,因爲你正在使用你的路徑的寬度爲10,所以你需要修改此行和使用這個代替

CGPathMoveToPoint(arc, NULL, startPoint.x + 5, startPoint.y); 

,現在應該工作,這是結果

enter image description here

我希望這^ h幫助你。