2013-10-14 19 views
8

Ho un po 'di CGPath (un poli con due cerchi) eseguito su un CAShapeLayer.Trim/sottrarre CGPath da CGPath?

Posso tagliare/sottrarre percorsi come questo?

enter image description here

+0

Risposta breve: No. Risposta lunga: è possibile ma è piuttosto difficile. –

+0

Grazie :) Posso farlo aggiungendo la maschera di livello come fallback, ma volevo sopprimere i passaggi di rasterizzazione, preferirei la matematica. – Geri

+1

+1 per il disegno – Norbert

risposta

4

Invece di fare i calcoli, il risultato può essere raggiunto in tempo a disegnare utilizzando kCGBlendModeClear.

// Create the poly. 
CGContextBeginPath(context); 
CGContextMoveToPoint  (context, a_.x, a_.y); 
CGContextAddLineToPoint (context, b_.x, b_.y); 
CGContextAddLineToPoint (context, c_.x, c_.y); 
CGContextAddLineToPoint (context, d_.x, d_.y); 
CGContextClosePath(context); 

// Draw with the desired color. 
CGContextSetFillColorWithColor(context, self.color.CGColor); 
CGContextFillPath(context); 

// Create a circle. 
CGContextBeginPath(context); 
CGContextAddEllipseInRect(context, (CGRect){ 
    b_.x - self.radius, 
    b_.y - self.radius, 
    self.radius * 2.0, 
    self.radius * 2.0 }); 
CGContextClosePath(context); 

// Draw with Clear (!) blend mode. 
CGContextSetBlendMode(context, kCGBlendModeClear); 
CGContextSetFillColorWithColor(context, self.color.CGColor); 
CGContextFillPath(context);