9
votes

Effacer après avoir dessiné avec CGContext

J'essaie de faire une simple application de dessin pour l'iPad où vous pouvez dessiner sur une image et j'utilise CGContext Stuff pour le faire, mais la façon dont j'ai initialement planifié pour la manipulation d'effacement consistait à dessiner des choses avec blanc ... Sauf que je viens de réaliser aujourd'hui que cela ne fonctionne pas lorsque vous dessinez sur une autre image, car vous "effacez-vous" également "effacer" l'image d'arrière-plan.

Y a-t-il un moyen de soutenir l'effacement réel?

Merci!


0 commentaires

3 Réponses :


4
votes

Affiche le dessin de l'utilisateur dans un calque au-dessus de l'image. Ensuite, l'effacement est aussi simple que de dessiner un patch transparent sur la couche de dessin afin de laisser l'image pixels ci-dessous montrez.


3 commentaires

Comment dessinez-vous un patch transparent? J'ai utilisé cgcontextstrgbstrokecolor avec un alpha de 0,0, mais cela ne semble pas fonctionner.


Jouez avec le mode de composition (copie au lieu de la sourceine, par exemple) et envisagez de remplir ainsi que des caresses.


Ceci est un non-burger. Devrait être un commentaire, pas une réponse.



24
votes

J'ai aussi besoin d'effacement de la fonctionnalité. Basé sur la réponse de @ Jeremy, voici ce qui a fonctionné pour moi:

CGContextRef cgref = UIGraphicsGetCurrentContext();

if(erase == TRUE) // Erase to show background
{
    CGContextSetBlendMode(cgref, kCGBlendModeClear);
}
else // Draw with color
{
    CGContextSetBlendMode(cgref, kCGBlendModeNormal);
}


3 commentaires

Vous êtes mon héros, merci beaucoup d'avoir donné une solution aussi simple!


Tout d'abord, je vais par le tutoriel de Ray Wenderlich pour créer une simple application de dessin. Tout fonctionne pour cela, mais lorsque je change le mode de mélange en kcgblendmodeclear tout ce qu'il fait, c'est effacer toute la toile une fois que les touches terminées sont terminées. Des pensées?


Excellent, bien que trop verbeux. Vous pouvez faire la même chose avec un one-liner: cgcontextsetblendMode (uigraphicsgetcurrentContext (), effacer? Kcgblendmodeclear: kcgblendmodenormal);



0
votes

Effacer tous les dessins CGContextref:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, self.bounds);
[self setNeedsDisplay];


0 commentaires