NSImageView / drawRect

POUNAS

Membre confirmé
3 Juillet 2011
35
0
Bonjour à toutes et à tous,

voici mon problème.

j'utilise une NSImageView avec une image (fixée par setImage) - ok.

lorsque je dessine une autre image par drawRect sur mon NSImageView, l'image dessinée (self.nsImageObj dans l'exemple ci-dessous) se superpose à l'ancienne sans l'effacer.

Bloc de code:
- (void)drawRect:(NSRect)dirtyRect {
    NSRect zOurBounds = [self bounds];
    
    [super drawRect:dirtyRect];
    
    if (self.nsImageObj != nil)      
        [self.nsImageObj drawInRect:zOurBounds fromRect: dirtyRect operation:NSCompositeSourceOver fraction:1]; 
}

Comment peut-on faire pour que la nouvelle image "efface et remplace" l'ancienne image ?

j'ai essayé de faire un setImage(self.nsImageObj) : il ne se passe rien, mon NSImageView n'est pas mise à jour ! :confused:

merci par avance.
 
Bloc de code:
- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect]; // non jamais
}

si tu veux overloader une nsimageview tu dois aussi overloader setimage et ajoute setImages dans ton cas
par d'un nsview cela sera plus simple, ton image n'est jamais vue parce que

1 - l'appele a un context graphic super personne ne fait ca premiere fois que je vois cette horreur
2 - le context n'est jamais cleared donc cela se superpose
3 - boninmi cet exemple est outdated et ce n'est pas le probleme
 
Dernière édition:
Il a tout dit.

Au lieu de subclasser NSImageView, subclass de NSView, ensuite y a juste à implémenter drawRect: mais sans appeler super;

Ma question est: comment on fait ça ? :)
tatouille m'ayant aidé à d'autres occasions, je me suis permis de poser la question.
Si POUNAS sait faire, je ne dis plus rien. Mais vu les erreurs apparemment grossières qu'il a commises, j'ai des doutes. :siffle:
Ayant une certaine expérience de l'enseignement de l'informatique et des langages (ce qui ne m'empêche pas d'être à un niveau très faible en Objective-C), je ne connais pas d'autre méthode pour apprendre à programmer que de donner des exemples de code. :zen:
 
Merci à tous pour les informations. :)

j'ai trouvé une solution qui marche.

Pour info boninmi je sais faire.

je suis d'accord avec toi à 100%, rien de vaut un peu de code pour apprendre.

pour info, je gère une liste d'images dans une NSCollectionView / NSBox / NSImageView.

(avec une gestion des images par NSArrayController).

La question est de savoir quels sont les avantages de subclasser NSView par rapport à NSImageView (à part [super drawRect:dirtyRect] qui ne sera plus appelé) dans ce contexte ?