[Résolu] Problème de tracé
Bonjour,
Je n'ai jamais été fortiche dans les NSView.. mais bon j'ai fait un système d'affichage de notes.
Cependant, j'ai un problème, lorsque je dessine mes "étoiles" pour la note, des fois les étoiles sont tracées n'importe où dans la fenêtre (voir image).
Voici mon code de ma sous-classe NSView :
Remarquez qu'une étoile s'est dessiné en "flipped" juste en dessous de "Abiword"
Edit : Bon ben j'ai trouvé, j'ai retiré le [self drawRect:[self frame]]; et à la place je fais un [ratingView setNeedsDisplay:YES] une fois que j'ai envoyé la note.
Faudra vraiment m'éclaircir sur le rafraà®chissement des vues
Je n'ai jamais été fortiche dans les NSView.. mais bon j'ai fait un système d'affichage de notes.
Cependant, j'ai un problème, lorsque je dessine mes "étoiles" pour la note, des fois les étoiles sont tracées n'importe où dans la fenêtre (voir image).
Voici mon code de ma sous-classe NSView :
<br />- (id)initWithFrame:(NSRect)frameRect<br />{<br /> if ((self = [super initWithFrame:frameRect]) != nil) {<br /> stars=0;<br /> }<br /> return self;<br />}<br /><br />- (void)drawRect:(NSRect)cellFrame<br />{<br /> NSImage* star = [NSImage imageNamed:@"star"];<br /> NSSize starSize = [star size];<br /> NSImage* noStar = [NSImage imageNamed:@"noStar"];<br /> int i;<br /><br /> for (i = cellFrame.origin.x; i < starSize.width*stars; i += starSize.width) <br /> [star drawInRect:NSMakeRect(i, cellFrame.origin.y, starSize.width, cellFrame.size.height)<br /> fromRect:NSMakeRect(0, 0, starSize.width, starSize.height)<br /> operation:NSCompositeSourceOver<br /> fraction:1.0];<br /> <br /> for (i = starSize.width*stars; i < starSize.width*5; i += starSize.width) <br /> [noStar drawInRect:NSMakeRect(i, cellFrame.origin.y, starSize.width, cellFrame.size.height)<br /> fromRect:NSMakeRect(0, 0, starSize.width, starSize.height)<br /> operation:NSCompositeSourceOver<br /> fraction:1.0];<br />}<br /><br />- (void)displayForStars:(int)starsNum<br />{<br /> stars = starsNum;<br /> [self drawRect:[self frame]];<br />}<br />
Remarquez qu'une étoile s'est dessiné en "flipped" juste en dessous de "Abiword"
Edit : Bon ben j'ai trouvé, j'ai retiré le [self drawRect:[self frame]]; et à la place je fais un [ratingView setNeedsDisplay:YES] une fois que j'ai envoyé la note.
Faudra vraiment m'éclaircir sur le rafraà®chissement des vues
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Question de contexte graphique...
Tu peux, mais dans ce cas, il faut un "lockFocus" avant, et un "unlockFocus" après.
Sinon, ton étoile sera dessinée dans le contexte en cours, soit en général pas là où tu veux :P