J'essaie de faire une vue qui permet à un utilisateur de dessiner avec leur doigt. J'ai un PNG fabriqué en pixelmator de la brosse. Mon drawrect: la méthode ressemble à ceci:
- (void)drawRect:(CGRect)rect { NSAssert(brush != nil, @""); for (UITouch *touch in touchesNeedingDrawing) { //Draw the touch [brush drawInRect:CGRectWithPoints([touch locationInView:self], [touch previousLocationInView:self]) blendMode:0 alpha:1]; } [touchesNeedingDrawing removeAllObjects]; }
6 Réponses :
est la brosse png chargée à une vue d'ensemble de l'image? C'est-à-dire que la variable brosse em> est un objet d'UIImageView, n'est-ce pas?
Si tel est le cas, peut-être simple aidera p> p>
Je suggère de faire un uiimageview. UiImageView * brosse = [UIImageView Imagenamed: @ "Brush.png"]; Code>
BTW peut-être c'est la raison pour laquelle je pensais que ça va être uiimageview. Semble je suis entré en collision avec le même problème, travaillant avec UiImage.
Le seul problème avec c'est que je me retrouverais avec un grand nombre de points de vue que je ne pouvais jamais débarrasser de.
Il semble que cela puisse prendre la couleur de remplissage actuelle du contexte. p>
Essayez de régler la couleur de remplissage pour le contexte avec CGContextsetFillColorWithColor () sur [Uicolor ClearColor] .CGCOLOR P>
Si cela ne fonctionne pas, la seule autre solution simple et ne devrait pas avoir de performance frappe est d'avoir 2 vues: P>
Remarque: vous ne devriez pas avoir besoin de gâcher avec le mode de mélange pour faire ce travail. Vous devriez être capable d'utiliser la méthode Drawnrect par défaut: Méthode P>
Vous pouvez également dessiner au point à la place du point: p>
solution est très simple, teste sur mon propre projet. En classe que vous avez mise à jour avec Custom Et c'est tout. Testé sur mon projet. P> - (VOID) Drawrect: (CGRRECT) RECLET CODE> SET IN
- (ID) INIT CODE> Couleur d'arrière-plan pour soi p>
[Auto SetbackColor: [Uicolor ClearColor]]; Code> P>
+1. Super. Surtout voir le "je crois que ...", "ça dirait." Et "je devrais .." réponses. Les faits. Aimer :-)
@ goonlight - Je pense que vous avez voulu dire "testé" sur votre propre projet, pas "Testates" sur votre propre projet.
Un problème possible est que vous définissez le blendmode sur 0. Je suggère d'utiliser la méthode -DrawinRect: code> sans mode de mélange. La question peut également être que votre point de vue a un fond noir, mais c'est douteux. Je suggérerais également de tenter d'afficher l'uiimage dans un UIImageView comme test. Le problème peut être lié à la façon dont Pixelmator exporte des images. P>
Votre problème est une idée fausse fondamentale de la façon dont Puisque vous ne dessinez que la touche actuelle (ES) ( Vous avez essentiellement deux options pour résoudre ce problème: P>
1) Gardez toutes les touches qui contribuent au dessin autour (ne videz pas le 2) dessine dans un tampon d'une sorte (par exemple un Drawrect: code> fonctionne réellement. Chaque fois que vous dessinez quelque chose dans le contexte graphique actuel, tout ce qui était là auparavant sera effacé (de sorte que seul le fond de l'arrière-plan
code> reste). P>
TouchSneDeDrawing code> est vidée), il n'y a rien sous le rectangle que vous remplissez qui pourrait montrer la transparence de l'image que vous dessinez, de sorte que la couleur de fond montre à travers. p>
touchesNeedDrawingDrawingdrawingDrawing Code> Tableau) et redessinez tous à chaque fois - cela va être facile mais assez lent. p>
uiimage code>, en utilisant
uigraphiquebeginimagecontext code> etc.). Chaque fois que votre dessin change, créez un nouveau tampon. Dessinez l'ancien tampon dans le nouveau tampon et les images pour le nouveau coup sur le dessus. P>
La brosse est une uiimage, juste pour clarifier.
Pourquoi ne pouvez-vous pas utiliser un uiimageview?
Parce que j'aurais besoin de centaines de sous-visions d'UiImageView, qui seraient irréalistes. J'essaie de laisser un utilisateur peindre avec son doigt avec une image de brosse et chaque fois que leur doigt se déplace, j'aurais besoin d'un nouveau UiImageView. J'aurais aussi des problèmes de suppression.
Vous n'avez pas besoin d'un UIImageView pour chaque touche. En fait, la façon habituelle de faire cette tâche est de créer un UIImageView et de le dessiner en fonction de la saisie de l'utilisateur.
Je fais presque ce que vous suggérez, seulement j'utilise un UIView. Chaque fois que quelqu'un traîne au doigt, je dis à l'umisage de se dessiner à cet endroit.