2015-06-08 27 views
7

Per risolvere il mio ultimo problema: Draw/Paint like sketch color inside a bezier path in UIView, ho scattato un'immagine esatta (del percorso) piena di colore selezionato. Poi, a disegnare che nel UIView, per il contesto di colore ho preso:Disegnare in UIView sui touchpoint dà effetto di sfocatura sui confini

lineColor=[UIColor colorWithPatternImage:img]; 

in drawRect:

CGPoint mid1 = midPoint(previousPoint1, previousPoint2); 
CGPoint mid2 = midPoint(currentPoint, previousPoint1); 
[curImage drawInRect:CGRectZero]; 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[self.layer renderInContext:context]; 
CGContextMoveToPoint(context, mid1.x, mid1.y); 
CGContextAddQuadCurveToPoint(context, 
          previousPoint1.x, 
          previousPoint1.y, 
          mid2.x, 
          mid2.y); 
CGContextSetLineCap(context, kCGLineCapRound); 
CGContextSetBlendMode(context, kCGBlendModeCopy); 
CGContextSetLineJoin(context, kCGLineJoinRound); 
CGContextSetLineWidth(context, self.lineWidth); 
CGContextSetStrokeColorWithColor(context,lineColor.CGColor); 
CGContextSetShouldAntialias(context, YES); 
CGContextSetAllowsAntialiasing(context, YES); 
CGContextSetFlatness(context,0.5); 
CGContextSetAlpha(context, 1.0); 
CGContextStrokePath(context); 

Si disegna esattamente nel percorso di vista, ma sui confini del colore va fuori come effetto la fusione.

Fonte immagine in cui il colore deve essere riempito: Image to be filled with color

immagine da utilizzare come colorWithPatternImage (img) enter image description here

Dopo aver disegnato su tocchi, Immagine resultimg: enter image description here

Cosa am Mi manca qui per riempirlo perfettamente? Qualsiasi aiuto con la grafica di base è il benvenuto! Grazie!

Per mascherare l'immagine che ho fatto anche:

-(void)clipView :(MyUIBezierPath*)path drawingView:(DrawingView*)myView 
{ 
    MyUIBezierPath *myClippingPath =path; 
    CAShapeLayer *mask = [CAShapeLayer layer]; 
    mask.path = myClippingPath.CGPath; 
    myView.layer.mask = mask; 
} 

Ma colorWithPatternImage e questo mascheramento fa lo stesso trucco vale a dire mi permette di disegnare solo all'interno del percorso, il problema che sto affrontando ora è: Dà un effetto negativo disegnando su punti di contatto attorno ai confini del percorso!

+0

Se non si applica una maschera di ritaglio al livello, lo si vede solo disegnandolo all'interno di Bezier. Vedi http://stackoverflow.com/questions/20410146/use-bezier-path-as-clipping-mask –

+0

Ho provato tutto pronto. Ha lo stesso problema con questo, il colore intorno al confine sembra ancora scorrevole, non al di fuori però , dall'interno scorre lontano dai confini del percorso. Il problema è con il disegno ai punti di contatto, il mascheramento non è il problema. –

+0

È lo stesso con l'anti-alias disattivato? –

risposta

1

Beh, funziona con il mio metodo di mascheramento tramite colorWithPatternImage, anche se mascherarlo per ritaglio è la stessa cosa. Il problema di estrazione era dovuto all'immagine disegnata al punto di tocco nel metodo "calculateMinImageArea: CGPoint1: CGPoint2: CGPoint3". Modificando le sue dimensioni (altezza-larghezza in base alla larghezza della linea) lo ordina.

0

È possibile creare un tracciato da questa immagine. Quindi crea un CGPathRef o CGMutablePathRef e quindi usalo come maschera sul tuo CGContextRef.

+0

Creare un percorso da quale immagine? –

+0

immagine di origine che hai pubblicato per primo. – CodenameLambda1

+0

Ho già memorizzato il percorso e con questo sto ottenendo solo la seconda immagine. La preoccupazione è che i tocchi continui vengano spostati intorno ai confini, il colore inizia a scorrere. Vedi la mia domanda collegata per vedere come la sto disegnando in drawRect. –