2016-08-31 4 views
-1

Le code ci-dessous dessine le coin arrondi à la fin du chemin (couleur verte). Mais, pas au début. Ce qui pourrait être fait de sorte que j'ai le coin arrondi au début aussi (où la couleur rouge commence). Ce n'est pas une ronde parfaite au départ.Coin arrondi pour 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

Il n'y a aucun coin dans votre dessin, arrondi ou non. Pourriez-vous être plus précis sur le problème? – matt

Répondre

1

Je travaillais sur votre question et voici ce que j'ai trouvé. Votre problème est lié à votre point de chemin que vous avez commencer

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

mais pour votre exemple, vous devez commencer sur startPoint.x + 5 parce que vous utilisez 10 de la largeur de votre chemin si vous avez besoin de modifier cette ligne et l'utilisation ce lieu

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

et devrait maintenant fonctionner, Ceci est le résultat

enter image description here

J'espère que cela h vous élimine.