2009-12-21 7 views
1

J'ai un bouton personnalisé: My Button http://cld.ly/29ubqtexte Dessin dans une sous-classe NSButton - Positionnement

et j'ai besoin que le texte soit centré, voici mon code:

NSMutableParagraphStyle *style = 
    [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
[style setLineBreakMode:NSLineBreakByWordWrapping]; 
[style setAlignment:NSLeftTextAlignment]; 
att = [[NSDictionary alloc] initWithObjectsAndKeys: 
      style, NSParagraphStyleAttributeName, 
      [NSColor blackColor], 
      NSForegroundColorAttributeName, nil]; 
[style release]; 
// other Drawing code here 
[[self title] drawInRect:[self bounds] withAttributes:att]; 

Comment centre-je le texte le centre de mon bouton (pas le centre des limites)?

Répondre

10

Vous souhaitez obtenir la taille du titre en utilisant NSString -sizeWithAttributes:. Ensuite, vous pouvez utiliser cette taille pour ajuster le dessin du titre dans vos limites.

Il y a une astuce à cela, car vous finirez presque toujours par diviser par deux à un moment donné de ce processus. Lorsque vous faites cela, vous pouvez vous retrouver avec un résultat demi-pixel, que Cocoa sera heureux d'utiliser. Cependant, votre texte sera flou. Vous souhaitez presque toujours appeler le floor() sur vos coordonnées avant de dessiner sur eux pour vous remettre sur les pixels intégrés.

Edit: Un exemple de base de centrage (cela devrait compiler correctement, je n'ai pas compilé et mon travail récent a été plus sur l'iPhone qui est à l'envers):

NSRect rect; 
rect.size = [[self title] sizeWithAttributes:att]; 
rect.origin.x = floor(NSMidX([self bounds]) - rect.size.width/2); 
rect.origin.y = floor(NSMidY([self bounds]) - rect.size.height/2); 
[[self title] drawInRect:rect withAttributes:att]; 

Quoi qu'il en soit, quelque chose le long ces lignes. Vous pouvez compenser un peu en raison de la façon dont votre bouton dessine, mais c'est l'idée de base.

+0

Je suis débutant à l'objectif c/cacao, pourriez-vous poster du code? – nanochrome

0

Vous pourriez être intéressé par Setting a Button’s Image, qui explique également comment positionner le titre par rapport à l'image du bouton.

+0

Je veux essayer de ne pas avoir d'images ... et je voudrais remplir le bouton – nanochrome