Comment puis-je mettre à jour NSCursor chaque fois que j'en ai besoin? J'ai implémenté la méthode resetCursorRects
. Dans resetCursorRects
je crée une image avec la taille nécessaire (la taille dépend de la valeur du curseur dans mon application) et faire le curseur avec cette image. Donc, si mon curseur, qui indique la taille du curseur nécessaire, est en cours de modification, j'ai besoin que mon curseur soit mis à jour. Donc, si vous pensez logiquement, appeler [self resetCursorRects]
devrait fonctionner, mais ce n'est pas le cas. Après avoir changé la valeur du curseur et par exemple la fenêtre de redimensionnement, le curseur se met à jour. Mais pourquoi ça ne se met pas à jour quand j'essaye de l'appeler?Mise à jour de NSCursor
0
A
Répondre
1
A cet effet, vous devez mettre en œuvre
@property (nonatomic, retain) NSArray *cursors;
dans votre fichier .h et quelque chose comme:
- (void)loadCursors
{
NSCursor *defaultCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:DEFAULT_CURSOR] hotSpot:NSMakePoint(2, 0)];
NSAssert(defaultCursor, @"defaultCursor failed to load");
NSCursor *clickedCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:CLICKED_CURSOR] hotSpot:NSMakePoint(2, 0)];
NSAssert(clickedCursor, @"clickedCursor failed to load");
NSCursor *draggingCursor = [[NSCursor alloc] initWithImage:[NSImage imageNamed:DRAGGING_CURSOR] hotSpot:NSMakePoint(17, 2)];
NSAssert(draggingCursor, @"draggingCursor failed to load");
self.cursors = [NSArray arrayWithObjects:defaultCursor, clickedCursor, draggingCursor, nil];
[defaultCursor release];
[clickedCursor release];
[draggingCursor release];
[self resetCursorRects];
}
- (void)setCursor:(NSUInteger)cursorIndex
{
[self discardCursorRects];
[self addCursorRect:self.bounds cursor:[self.cursors objectAtIndex:cursorIndex]];
[(NSCursor *)([self.cursors objectAtIndex:cursorIndex]) set];
}
- (void)resetCursorRects
{
[self setCursor:CursorTypeDefault];
}
et utiliser ces méthodes dans quelque chose comme:
- (void)mouseDown:(NSEvent *)theEvent
{
[self setCursor:CursorTypeClicked];
}
ou où tu veux. N'oubliez pas d'implémenter Enum avec votre curseur et de charger les curseurs dans votre méthode d'initialisation!
Espérons que cela aide.
2
Si vous voulez juste une solution plus simple, à l'aide des curseurs seulement du système, vous pouvez le faire:
Declare dans le fichier d'en-tête de vue:
NSCursor *currentCursor;
Mettre en oeuvre cette méthode:
- (void)resetCursorRects
{
NSSize clientSize = self.frame.size;
NSRect clientArea = {0, 0, clientSize.width, clientSize.height};
[self addCursorRect:clientArea cursor:currentCursor];
}
Et il suffit de le faire pour changer le curseur:
currentCursor = [NSCursor arrowCursor];
[self discardCursorRects];
[currentCursor set];
Ou utilisez l'un des autres curseurs définis par le système.
Questions connexes
- 1. Niveau inférieur à NSCursor
- 2. Mise à jour mySQL de lien de mise à jour
- 3. Modification de NSCursor pour une vue spécifique
- 4. Mise à jour de l'application Android. Petite mise à jour
- 5. Mise à jour de DataGridView avec mise à jour automatique
- 6. Formulaire de mise à jour Non Mise à jour Détails
- 7. Mise à jour de python sqlite3 non mise à jour
- 8. Mise à jour du panneau de mise à jour
- 9. NSCursor: la méthode "set" n'a aucun effet
- 10. Mise à jour de la mise à jour de la mise à jour de l'application iTunes Connect
- 11. magento mise à jour personnalisée mise à jour
- 12. NHibernate - Mise à jour inattendue sans mise à jour explicite
- 13. php mise à jour multi-tableau mise à jour
- 14. MISE À JOUR MySQL - mise à jour sélective
- 15. Mise à jour MySQL non mise à jour
- 16. Mise à jour de l'inventaire
- 17. Mise à jour de dataTable
- 18. session de mise à jour
- 19. Mise à jour de dataGridView
- 20. Mise à jour de JSpinner
- 21. déclencheur de mise à jour
- 22. Mise à jour de TextView
- 23. Mise à jour de Nulls
- 24. Mise à jour de l'utilisateur
- 25. Mise à jour de dojox.grid.DataGrid
- 26. Instructions de mise à jour
- 27. Mise à jour de l'année?
- 28. Fonction de mise à jour
- 29. Mise à jour MySQL
- 30. Kerberos Mise à jour
Merci. Par ailleurs '[self.window invalidateCursorRectsForView: self];' fonctionne aussi – hockeyman
Comment puis-je faire ça avec swift? ' –