Ho un'app di disegno in cui mi piacerebbe creare un metodo di annullamento. Il disegno si svolge all'interno del metodo TouchesMoved:Salvataggio di CGContextRef
Sto provando a creare un CGContextRef e lo spingo allo stack OPPURE salvarlo in una proprietà di contesto che può essere ripristinata in seguito, ma non sto avendo fortuna. Qualsiasi consiglio sarebbe grande. Ecco quello che ho ...
UIImageView *drawingSurface;
CGContextRef undoContext;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UIGraphicsBeginImageContext(self.view.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[drawingSurface.image drawInRect:CGRectMake(0, 0, drawingSurface.image.size.width, drawingSurface.image.size.height)];
UIGraphicsPushContext(context);
// also tried but cant figure how to restore it
undoContext = context;
UIGraphicsEndImageContext();
}
Poi ho un metodo innescato dal mio pulsante Annulla ...
- (IBAction)restoreUndoImage {
UIGraphicsBeginImageContext(self.view.frame.size);
UIGraphicsPopContext();
drawingSurface.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
Quando eseguo questo, credo che il mio drawingSurface viene assegnato nil perché cancella tutto nell'immagine.
La mia ipotesi è che non posso usare pop e spingere in questo modo. Ma non riesco a capire come salvare solo il contesto e poi spingerlo nuovamente sul disegnoSuzza. Hmmmm. Qualsiasi aiuto sarebbe ... beh ... utile. Grazie in anticipo -
E, solo per riferimento, ecco cosa sto facendo per disegnare sullo schermo, che funziona benissimo. Questo è dentro la mia touchesMoved:
UIGraphicsBeginImageContext(self.view.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[drawingSurface.image drawInRect:CGRectMake(0, 0, drawingSurface.image.size.width, drawingSurface.image.size.height)];
CGContextSetLineCap(context, kCGLineCapRound); //kCGLineCapSquare, kCGLineCapButt, kCGLineCapRound
CGContextSetLineWidth(context, self.brush.size); // for size
CGContextSetStrokeColorWithColor (context,[currentColor CGColor]);
CGContextBeginPath(context);
CGContextMoveToPoint(context, lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y);
CGContextStrokePath(context);
drawingSurface.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Risposta fantastica e ben pensata. Non sono sicuro del motivo per cui OP non ha accettato questo. – Tim