Je rencontre des problèmes pour obtenir le NSRect de la bordure d'une vue. Je continue d'obtenir une erreur de sélection non reconnue.Sélecteur non reconnu - [NSView borderRect]
Voici le code:
NSGradient *BorderGradient = [[NSGradient alloc] initWithStartingColor:[NSColor blackColor] endingColor:[NSColor whiteColor]];
[BorderGradient drawInRect:[self.window.contentView borderRect] angle:-90];
// Unrecognized Selector error here
J'essaie d'accéder à la rect frontière pour ajouter un dégradé de couleurs à la frontière. Le code se bloque également lorsque je tente d'accéder au borderRect par lui-même, comme ceci:
NSRect rect = [self.window.contentView borderRect];
NSLog(@"origin.x = %f", rect.origin.x);
Et si vous essayez de convertir le drawInRect: à CGRect. Tel est:
NSGradient *BorderGradient = [[NSGradient alloc] initWithStartingColor:[NSColor blackColor] endingColor:[NSColor whiteColor]];
[BorderGradient drawInRect:NSRectToCGRect([self.window.contentView borderRect]) angle:-90];
// Unrecognized Selector error here
Toute aide serait grandement appréciée.
Merci!
D'accord, c'est très utile. Ce n'est donc pas une méthode personnalisée que j'ai implémentée, mais elle reste valide. J'ai trouvé que la vue de contenu de ma fenêtre n'est pas une instance de NSBox, mais je ne veux toujours pas -frame ou -bounds. Je veux obtenir le NSRect de la bordure de la vue et être capable d'ajouter un dégradé. Des idées? –
Vous devez créer une sous-classe personnalisée de NSView. Dessinez une bordure à l'aide d'un dégradé dans votre sous-classe (remplacez '-drawRect:'). Ensuite, faites en sorte que le contenu de votre fenêtre affiche une instance de votre sous-classe personnalisée (vous pouvez le configurer dans Interface Builder ou si vous créez la fenêtre par programmation en utilisant - [NSWindow setContentView:] '). Pour ce que ça vaut, '-frame' et' -bounds' renvoient tous les deux un NSRect qui est en fait le rectangle qui définit la frontière de la vue. Dans votre méthode '-drawRect:' personnalisée, vous devrez utiliser '-bounds' pour obtenir le rectangle à dessiner. –
Bon conseil, qui fonctionnerait bien, mais cela créera tout de même un dégradé sur toute la longueur de la vue. Je suis toujours à la recherche d'un moyen d'ajouter un dégradé au-delà de la bordure (pensez à une bordure fine, colorée et en dégradé autour du bord de la vue) de la vue et non de la vue entière. Connaissez-vous un moyen de le faire? –