2012-08-29 19 views
5

Al usar - [NSString drawInRect: withAttributes:], principalmente cuando se utiliza el Helvetica Neue incorporado pero también con otras fuentes, el kerning es realmente malo. Sin embargo, cuando se representa la misma cadena en Text Edit (que usa NSTextView), el kerning es genial. Tenga en cuenta estas dos cadenas:Interletraje incorrecto al usar - [NSString drawInRect: withAttributes:]

Bad kerning

Good kerning

Para los tamaños de punto pequeños, el primer caso (dictada en cacao) es casi ilegible, mientras que el segundo caso (de edición de texto) es mucho mejor. No creo que la información de interletraje se esté utilizando aquí. Si aplico NSKernAttribute con un valor de 0.0 (que de acuerdo con la documentación desactiva el interletraje) obtengo el mismo resultado, el que está en la parte superior.

También intenté usar Core Text con CTLineDraw, pero todavía obtuve el kerning incorrecto. Entonces mi pregunta es, ¿hay algo especial que deba hacer para habilitar el kerning en el sistema de texto Cocoa? Si no, ¿cómo aplica NSTextView kerning?

+0

¿Qué sistema operativo está ejecutando? No hay diferencia en mi 10.7.4. Veo una diferencia de 2 píxeles en 10.6.8 para 72 puntos H. No, pero aún es mucho más bajo que en la captura de pantalla. ¿Estás seguro de que los atributos de escritura predeterminados en tu NSTextView aún no incluyen algún valor? ¿Intentó enviarlo 'useStandardKerning:'? – hamstergene

+0

Esto es 10.7.4, con el Helvetica Neue estándar (versión 7.0d27e1). La segunda captura de pantalla es de Edición de texto (la aplicación), utilizando un documento nuevo. – Aderstedt

+0

Seleccionar todo, Formato, Fuente, Kern, Usar predeterminado/Ninguno - ¿Cambia algo? No tengo esa diferencia entre TextEdit y la cadena atribuida personalizada. ¿Qué pasa con NSTextFieldCell y NSButtonCell, también dibujan mal para usted? – hamstergene

Respuesta

1

El ejemplo superior es 'más apretado' y el inferior es 'más flojo', vea -[NSTextView tightenKerning], -[NSTextView loosenKerning]. Aquí Apple se está refiriendo confusamente a lo que todos los demás llaman 'Tracking' como 'Kerning', es decir. una cantidad constante de espacio adicional (positivo o negativo) aplicado uniformemente entre cada glifo, después del 'avance de personaje' especificado en la fuente, para hacer que el texto aparezca, bien, más apretado o más suelto.

La "estanqueidad" o "holgura" predeterminadas es una propiedad del motor de renderizado, no de la fuente, y podría ser fácilmente diferente entre diferentes versiones de OSX, aplicaciones o elementos de UI.

En una fuente, la tabla de interletraje es para ajustes al avance de caracteres necesarios para pares específicos de glifos, por ejemplo, en mi fuente hipotética: 'AV' aparece como un par de interletraje - la 'A' debe tener una avanzar cuando el personaje que sigue es una 'V'.

Las fuentes OSX Helvetica y HelveticaNeue (y muchas de las otras fuentes) no tienen información de interletraje, por lo que tiene razón en que no se utiliza información de interletraje en sus ejemplos.

Si la fuente no tiene información de Kerning, su pregunta "¿Cómo habilito el kerning en el sistema de texto Cocoa?" no tiene sentido o no significa lo que piensas que significa (?).

+0

Al observar la tabla 'kern' en la fuente real, Helvetica Neue incluye una tabla de interletraje con 98 pares de interletraje. ¿Qué te hace decir que no? – Aderstedt

+0

Tienes razón, tiene algunas. Estoy sorprendido y seguro de que no solía tener ninguno. Aún así, no es relevante para el ejemplo dado, ¿verdad? es decir- sin pares que contengan los números – hooleyhoop

+0

Sí, y la mayoría de los pares son solo ajustes negativos. Entonces, probablemente tengas razón, el seguimiento es diferente. Me pregunto por qué el seguimiento predeterminado es tan diferente entre 10.7 y 10.8. Mi solución para esto es dejar la salida pareciendo "apretada" para 10.7 usuarios, y les digo a los interesados ​​que la actualicen a 10.8. – Aderstedt

Cuestiones relacionadas