2011-01-15 21 views
7

Mam aplikację na iOS, którą konwertuję do aplikacji na iOS/Mac. W wersji na iOS użyłem UILabel dla mojego tekstu. Oczywiście nie mogę tego zrobić na Macu. Widzę dwie opcje:UILabel/NSTextView vs. CATextLayer

Opcja 1: Użyj UILabeli na iOS i NSTextView na Macu.

Opcja 2: Użyj opcji CATextLayers na obu platformach, jako część ogólnej strategii, aby wykonać jak najwięcej pracy nad obiema platformami.

Oczywiście opcja 2 ma dużą zaletę, że będzie mniej kodu do utrzymania. Moje pytanie brzmi - czy opcja 1 ma jakieś zalety, o których powinienem wiedzieć? W szczególności, czy CATextLayer ma wady, których nie mają UILabel i NSTextView?

EDYCJA: To jest gra. Użytkownik nigdy nie wprowadza tekstu - ale gra wyprowadza niektóre, na przykład wyniki.

Odpowiedz

10

To zależy od tego, w jaki sposób zamierzasz używać tekstu i typu aplikacji, którą piszesz. Jeśli tekst będzie przede wszystkim statyczny i będzie używany jako etykiety lub okna dialogowe w interfejsie użytkownika, to powinno działać poprawnie. Jeśli potrzebujesz wymyślnych animacji, bardziej odpowiednie może być ustawienie CATextLayer. Jeśli piszesz grę (na przykład pasjans), interfejsy użytkownika będą bardziej podobne i używanie go będzie miało sens. Jeśli piszesz bardziej ogólną aplikację, taką jak klient czatu, interfejsy i sposoby, w jakie użytkownik wchodzi w interakcję z aplikacją, są bardzo różne i prawdopodobnie bardziej sensownym byłoby używanie NSTextFields lub NSTextViews.

To wszystko zależy od rodzaju tworzonej aplikacji, ale jeśli jest to bardziej tradycyjna aplikacja, jak na przykład klient czatu, to myślę, że przy użyciu CATextLayer i konieczności tworzenia wszystkiego w interfejsie programowo, raczej niż używanie NSTextField i układanie plików w pliku nib, oznaczałoby setki więcej linii kodu. Z drugiej strony, jeśli aplikacja jest bardziej podobna do przykładu z pasjansa, a wymiary warstw i właściwości są zdefiniowane w sposób uwzględniający platformę, na której działa aplikacja, prawdopodobnie można zapisać dużo kodu .

Dla rekordu, NSTextField jest prawdopodobnie najbliższą równoważną klasą AppKit do UILabel. NSTextView jest klasą o większej wadze ciężkiej, która zazwyczaj jest potrzebna tylko wtedy, gdy chcesz wykonać pełne akapity i bardziej zaawansowany skład. Częścią tego, co czyni lżejszą wagę, jest to, że mają one tendencję do udostępniania niewidocznej, pojedynczej NSTextView (lub jej nadklasy, NSText) jako edytora pól, który pomaga w wprowadzaniu tekstu. Ponieważ tylko jedno pole tekstowe w aplikacji może być aktywne jednocześnie, może współużytkować zwykły edytor pól, aby poprawić wydajność.

1

Jest jeszcze jedna wada, na którą należy zwrócić uwagę (lub przyszłych ludzi odwiedzających ten wątek). Podczas korzystania z UILabel cała dostępność jest dostępna za darmo poprzez UIACcessibility. W przypadku CATextLayer musisz zająć się wszystkim samemu: dotknij wewnątrz, etykiety dostępności, pozycję na liście accessibilityElementy ...