2013-07-16 17 views
6

Ho due UIImageView, prima sopra il secondo. Voglio cancellare il pezzo della prima immagine con il pennello (il pennello è un'immagine png con bordo sfumato) per rendere visibile il pezzo della seconda immagine.Come cancellare parte di UIImageView con png-brush e UIBezierPath

ho fatto in questo modo:

1) touchesMoved e [auto setNeedsDisplayInRect: [auto brushRectForPoint: touch_location]];

2) a (vuoto) drawRect: (CGRect) rect chiamo [_brush drawAtPoint: touch_location blendMode: kCGBlendModeDestinationOut alpha: 1];

Funziona bene, ma la frequenza di touchesMoved non è sufficiente, se l'utente muove un dito troppo velocemente, allora ho un sacco di linee corte (o anche punti) invece di una linea lunga.

Ho trovato informazioni di UIBezierPath e example ma autore solo disegna linee dal percorso:

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextAddPath(context, path); 

CGContextSetLineCap(context, kCGLineCapRound); 
CGContextSetLineWidth(context, self.lineWidth); 
CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor); 

CGContextStrokePath(context); 

Come posso disegnare il mio pennello PNG con UIBezierPath?

Ho bisogno di qualcosa come questo

enter image description here

Grazie mille!

+0

Che ne dici di una media mobile del punto di contatto? Ciò introdurrà un certo ritardo (che può essere o non essere desiderabile) ma appianare i "salti". Più lungo è il periodo MA, più liscio, ma maggiore è anche il ritardo. – verec

+0

Ok, capisco, ma ovviamente il ritardo non è buono. Comunque grazie per la tua idea. Potrei provare a fare qualcosa con questo. –

risposta

1

C'è un progetto open source che sarà utile per voi .. iOS-Scratch-n-See. La classe ImageMaskView sarà interessante da studiare.

Spero che questo aiuti!

+0

Sì! Amar, è esattamente quello che voglio. Molte grazie! –