Problema con lo spessore del carattere dopo aver cambiato BasosDK da 10,5 a 10.6
-
12-11-2019 - |
Domanda
Dopo aver cambiato il BasosDK del mio progetto a 10.6 ho notato che il mio testo disegnato personalizzato sembra diverso (guarda le immagini: lo stesso codice per il disegno)
Under 10.5 BasesDK: immagine1
Under 10.6 BasesDK: immagine2
Sto disegnando con [(NSString *) MyString Drawinrect: Myrect WithAttributes: myattributes].
myAttributes = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
[NSColor myColor], NSForegroundColorAttributeName,
[NSFont systemFontOfSize:18], NSFontAttributeName,
paragraphStyle, NSParagraphStyleAttributeName,
shadow, NSShadowAttributeName, nil];
Qual è la ragione di tale differenza, o solo come ridurre lo spessore del carattere? Ho provato a ridurre lo spessore di
[NSFontManager convertWeight:NO ofFont:font]
Ma non sembra molto meglio ...
Grazie in anticipo.
Soluzione 2
Ora conosco il motivo per cui succede e la correzione di questo problema: Sembra che con 10.6 sia stata aggiunta opzione LCD Font LCD, che è abilitata nelle preferenze -> Aspetto -> "Utilizzare il carattere LCD Smoothing quando disponibile" come casella di controllo che viene controllata per impostazione predefinita.
Ecco perché dopo aver cambiato il basosdk del progetto a 10.6, i testi nell'applicazione sono diventati LCD-Style levigati e sembrando male.
Quindi la correzione del problema nel codice è modificare le opzioni di levigatura nel contesto grafico prima dei nostri disegni:
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetShouldSmoothFonts(context, NO);
.
La documentazione di questo metodo ci dice che questo parametro fa parte dello stato grafico, quindi se non si desidera modificare questa opzione in altri disegni di font, è necessario ripristinare lo stato grafico.
Grazie a @nsgod per trovare il motivo di questo problema.
Altri suggerimenti
Se ingrandiamo e guardiamo da vicino in entrambe le immagini, noteremo una differenza immediata (almeno lo faccio):
Il testo nell'immagine superiore utilizza la levigatura del carattere in stile CRT, mentre il testo nell'immagine inferiore utilizza la levigatura del carattere stile LCD medio. (Tutti e 3 gli stili del LCD Font Smoothing introdurranno i lanci a colori nei pixel anti-alias).
Avevamo bisogno di maggiori informazioni sulla tua configurazione dei test per poter dire perché sta accadendo. Sotto quale versione / i di OS X stai provando questo? Ad esempio, la tua app è stata creata contro il 10,6 SDK con un obiettivo di distribuzione di 10.5, l'immagine superiore è stata presa durante il test in OS X 10.5.x (sulla stessa macchina), e l'immagine inferiore è stata presa durante il test inferiore a 10.6.x ? Oppure, è stato fatto tutto il test in Mac OS X 10.6.x, e la costruzione contro il 10,5 SDK ha portato all'immagine superiore e la costruzione contro il 10,6 SDK ha portato all'immagine inferiore? Che modello Mac stai usando? Che tipo di display LCD o CRT esterni hai collegato, se presente?
Solo un paio di idee, senza avere le informazioni poste sopra. Lo stile di levigatura del carattere predefinito è CRT in 10.5, credo, e 10,6 impostazioni predefinite a "Automatic". Quindi, se si dispone di un sistema con un display LCD e si stavano testando sotto 10.5, ma non hanno mai cambiato lo stile Lisciatura del carattere dallo stile predefinito del CRT, quindi avresti ottenuto un'immagine come quella superiore. Se si è quindi passata a 10.6 sullo stesso sistema, è possibile che il carattere automatico automatico 10.6 ha rilevato automaticamente il display LCD, e utilizzato la levigatura del carattere del carattere in stile LCD medio, che comporterebbe il testo "più pesante" nell'immagine inferiore .
Un'altra cosa da tenere a mente è che il valore di levigatura del carattere è memorizzato su base a-host. Ad esempio, sulla mia macchina, il valore AppleFontSmoothing
viene memorizzato in ~ / libreria / preferenze / byhost / .globalpreferences. ##########. Plista, dove è il ################. il tuo hardware uuid. Suppongo che sia possibile che ci possano essere 2 valori diversi memorizzati per diverse configurazioni host.
Stai ottenendo ciò che chiedi
[NSFont systemFontOfSize:18]
Sono più probabili caratteri sottilmente diversi tra 10,5 e 10.6.Un grafico è impazzito per qualsiasi motivo.
Cosa ottieni se si registra l'uscita di [NSFont systemFontOfSize:18]
.È diverso tra 10,5 e 10,6?