8
votes

Nsslidercell personnalisé

J'ai une sorte de réalisation de la mise en œuvre d'une cellule de curseur personnalisée pouvant s'appuyer sur des images pour la barre de défilement et le bouton. Le seul obstacle qui est en quelque sorte est celui-ci, lorsque je traîne rapidement le bouton, les images sont gâchées. J'ai posté une photo d'écran.

capture d'écran

Voici le code: xxx

ah je suis si proche. Toute aide sur la raison pour laquelle cela se produit et comment résoudre ce sera grandement apprécié, merci!


0 commentaires

4 Réponses :


2
votes

Supprimer tous les -Lockfocus et -unlockfocus messages. Le cadre veillera à la configuration du contexte de dessin pour vous avant -DrawbarInside: retourné: ou -Drawknob: est déjà envoyé.

En outre, vous ne devriez pas créer d'objets dans une méthode de dessin.


2 commentaires

Hey merci NsrePonder, j'ai supprimé la serrure et déverrouillée et j'ai également supprimé la majeure partie du code d'objet créatif. Cependant, le problème persiste toujours. Je dessine actuellement 3 images, bar à gauche, barre droite et le bouton. Cela ne se produit que lorsque je déplace la souris rapidement. Si je traîne, ça ralentit, il dessine bien.


Même lorsque j'utilise la méthode privée (que je n'aime pas vraiment) et a commenté la barre de dessin gauche. Il semble que le même problème persiste encore si je traîne le bouton de droite à gauche rapidement. Et quand je libère la souris, les espaces manquants disparaissent et une belle image est dessinée dessus.



1
votes

ha, c'est une autre histoire. Non, NSresponder a raison et vous devez supprimer tous les éléments de «Lockfocus», cependant, ce problème est le résultat de la barre de curseur par défaut dessinée par le NSSliderCell quelque part extérieur du tiroir: retourné: retourné. J'ai fait face à cette question, il y a pas jusqu'à présent.

Voici une discussion et une solution: http://www.cocoabuilder.com/archive/cocoa/177288-preventting-nsslider-bar-from-Drawing.html , en bref, vous pouvez remplacer tout le drawcell complet : Avis: ou utilisez un «truc de piratage sale» avec une méthode privée. Personnellement, je n'aime pas les hacks, mais dans ce cas, j'ai fait xxx

et cela a résolu le problème pour moi


2 commentaires

Hey Gobra, oui j'ai vu ton poste auparavant. J'ai essayé cette méthode mais elle ne fonctionne toujours pas malheureusement :( BTW Le côté gauche est une image, pas la barre par défaut. C'était une image aléatoire que j'ai attrapé mon ordinateur à des fins de test.


Oh oui, et même si le bar est là, mes images semblent être tirées dessus et cela ne montre pas vraiment le bar.



13
votes

OK, il est donc compris. Apparemment, le curseur essayait d'être intelligent et de ne tirer que lorsque le bouton a été. Donc, apparemment, je dois invalider la commande tout le temps en remplacement de SetNeedsDisplayInrect dans la classe du curseur.

#import "customSlider.h"

@implementation customSlider
-(void)setNeedsDisplayInRect:(NSRect)invalidRect{
    [super setNeedsDisplayInRect:[self bounds]];
}
@end


1 commentaires

Homme, vous venez de m'a sauvé. Je cherchais une solution à ce problème exact des dernières heures. Merci!



4
votes

Je suis un débutant dans l'objectif-c. J'ai aussi rencontré ce problème! Voici la solution pour trouver que j'ai passé deux jours))) Enregistrer et restaurer des graphiquesState: xxx

désolé pour le mauvais anglais.


1 commentaires

Ça a marché! Mais je ne peux tout simplement pas comprendre comment ça marche! Quelqu'un pourrait-il aider à l'expliquer?