2009-11-18 13 views
14

Vorrei creare la barra di stato con l'effetto testo come in Safari o iTunes, cioè il testo rientrato.Aggiungi ombra (effetto testo da incasso) all'etichetta Cocoa senza degradare la qualità del rendering del testo

example

Tuttavia, se ho semplicemente aggiungere ombra in Interface Builder utilizzando il pannello di Core Animation, peggiori di testo di rendering calci di OS X in:

wheres my subpixel

Qual è il trucco per ottenere incasso testo su un l'etichetta e mantiene il rendering subpixel corretto?

risposta

35

C'è un modo integrato per effettuare questa operazione:

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

C'è un modo per modificare il colore di evidenziazione di questo? – coneybeare

+0

Io non la penso così, questo è gestito internamente dal sistema. Dovresti scrivere il tuo codice di disegno per cambiarlo. –

6

È un vecchio trucco economico: si disegna il testo in bianco su un offset e si disegna il testo nero sopra di esso.

C'è un gancio per le ombre nel sistema di disegno del testo, NSShadowAttributeName di NSAttributededtring. Ma testando questo, sembra che uccida anche l'antialiasing subpixel.

+0

+1 fa un sacco di senso. Ben fatto. –

+2

Non c'è una soluzione migliore? Una delle numerose API di testo OS X deve eseguirla correttamente ... Non voglio aggiungere un'altra etichetta, poiché sarà più difficile da mantenere e sarà probabilmente fastidiosa per gli utenti di Voice Over. – Kornel

+1

La risposta ha riguardato il disegno di testo aggiuntivo, non necessariamente l'aggiunta di un'etichetta aggiuntiva. È possibile creare una sottoclasse personalizzata di NSTextField con codice di disegno personalizzato. Quindi, hai solo bisogno di una etichetta. –

Problemi correlati