2011-01-15 19 views
7

Tengo una aplicación para iOS que estoy convirtiendo a una aplicación iOS/Mac. En la versión de iOS, utilicé UILabels para mi texto. Obviamente, no puedo hacer eso en el mac. Puedo ver dos opciones:UILabel/NSTextView vs. CATextLayer

Opción 1: Use UILabels en iOS y NSTextView en la Mac.

Opción 2: Use CATextLayers en ambas plataformas, como parte de una estrategia general para hacer que tanto trabajo como sea posible en ambos.

Obviamente, la opción 2 tiene una gran ventaja de que habría menos código para mantener. Mi pregunta es: ¿la opción 1 tiene alguna ventaja que deba tener en cuenta? En particular, ¿tiene CATextLayer inconvenientes que UILabel y NSTextView no tienen?

EDITAR: Es un juego. El usuario nunca ingresa texto, pero el juego genera algunos puntajes, por ejemplo.

Respuesta

10

Depende de la forma en que pretenda utilizar el texto y el tipo de aplicación que está escribiendo. Si el texto será principalmente estático y se usará como etiquetas o diálogos en la interfaz de usuario, entonces NSTextField debería funcionar bien. Si necesita animaciones sofisticadas, entonces CATextLayer puede ser más apropiado. Si está escribiendo un juego (solitario, por ejemplo), las IU tenderán a ser más similares y usar CATextLayer y CoreAnimation tendría sentido. Si está escribiendo una aplicación más general como un cliente de chat, las interfaces y las formas en que el usuario interactúa con la aplicación son muy diferentes, y probablemente tendría más sentido usar NSTextFields o NSTextViews.

De nuevo, todo depende del tipo de aplicación que está creando, pero si es una aplicación más tradicional como el ejemplo del cliente de chat, entonces creo que usar CATextLayer y tener que crear todo en la interfaz mediante programación, que usar NSTextField y colocar cosas en un archivo de punta, significaría cientos de más líneas de código. Por otro lado, si la aplicación es más parecida al juego solitario, y las dimensiones de las capas y propiedades se definen de una manera que tenga en cuenta en qué plataforma se está ejecutando la aplicación, entonces probablemente puedas guardar una gran cantidad de código. .

Para el registro, NSTextField es probablemente la clase de AppKit equivalente más cercana a UILabel. NSTextView es una clase más pesada que generalmente solo necesitas si quieres hacer párrafos completos y composición tipográfica más avanzada. Parte de lo que hace que NSTextField sea más liviano es que tienden a compartir un único NSTextView invisible (o su superclase, NSText) como el editor de campo, que ayuda con el ingreso de texto. Como solo un campo de texto en una aplicación puede tener foco al mismo tiempo, puede compartir un editor de campo común para ayudar a mejorar el rendimiento.

1

Hay una desventaja más que debe tener en cuenta (o las personas futuras que ven este hilo). Al usar UILabel, toda la accesibilidad es gratuita a través de UIAccessibility. Para CATextLayer, tendrá que manejar todo usted mismo: toque adentro, la etiqueta de accesibilidad, la posición en la lista de elementos de accesibilidad ...

Cuestiones relacionadas