2009-11-18 3 views
14

Je voudrais créer une barre d'état avec effet de texte comme dans Safari ou iTunes, c'est-à-dire en retrait.Ajouter une ombre (effet de texte en creux) à l'étiquette Cocoa sans affecter la qualité de rendu du texte

example

Cependant, si j'ajoute simplement l'ombre dans Interface Builder l'aide du panneau Core Animation, pire texte de Mac OS X rendu des coups de pied dans:

wheres my subpixel

Quel est le truc pour obtenir un texte en retrait sur un étiquette et garder le bon rendu sous-pixel?

Répondre

35

Il y a un moyen intégré pour le faire:

[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; 
+1

Existe-t-il un moyen d'éditer la couleur de surbrillance de ceci? – coneybeare

+0

Je ne pense pas, c'est géré en interne par le système. Vous devez écrire votre propre code de dessin pour le modifier. –

6

C'est une vieille astuce bon marché: vous dessinez le texte en blanc à un décalage et ensuite dessinez le texte noir par-dessus.

Il existe un point d'ancrage pour les ombres dans le système de dessin de texte, NSShadowAttributeName de NSAttributedString. Mais en testant cela, il semble également tuer l'antialiasing du sous-pixel.

+0

+1 Makes énormément de sens. Joli. –

+2

N'y a-t-il pas une meilleure solution? Une des nombreuses API textuelles OS X doit le faire correctement ... Je ne veux pas ajouter d'autre label, car cela sera plus difficile à maintenir et sera probablement ennuyeux pour les utilisateurs Voice Over. – Kornel

+1

La réponse a consisté à dessiner un texte supplémentaire, sans nécessairement ajouter une étiquette supplémentaire. Vous pouvez créer une sous-classe personnalisée de NSTextField avec du code de dessin personnalisé. Ensuite, vous n'avez besoin que d'une étiquette. –