2013-02-13 2 views
1

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!

Répondre

1

NSView n'a pas de méthode nommée -borderRect. Est-ce une méthode personnalisée que vous avez implémentée? NSBox a une méthode -borderRect. Vous attendez-vous à ce que l'affichage du contenu de votre fenêtre soit une instance de NSBox? Avez-vous vérifié pour voir que c'est vrai. Vous voulez vraiment -frame ou -bounds?

+0

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? –

+0

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. –

+0

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? –

1

NSView (ce qui est de retour de self.window.contentView) n'a pas une méthode borderRect, qui est à l'origine du erreur de sélection Unrecognized. Vous souhaitez probablement frame ou bounds à la place.

Questions connexes