2011-01-15 5 views
7

У меня есть приложение iOS, которое я конвертирую в приложение iOS/Mac. В версии iOS я использовал UILabels для моего текста. Очевидно, я не могу этого сделать на Mac. Я вижу два варианта:UILabel/NSTextView против CATextLayer

Вариант 1: Использовать UILabels в iOS и NSTextView на Mac.

Вариант 2: Используйте CATextLayers на обеих платформах, как часть общей стратегии, чтобы сделать как можно больше работы над обоими из них.

Очевидно, что вариант 2 имеет большое преимущество в том, что для обслуживания будет меньше кода. Мой вопрос: есть ли у варианта 1 какие-то преимущества, о которых я должен знать? В частности, имеет ли CATextLayer недостатки, которые не имеют UILabel и NSTextView?

EDIT: Это игра. Пользователь никогда не вводит текст - но игра выводит некоторые, например, баллы.

ответ

10

Это зависит от того, как вы собираетесь использовать текст и тип приложения, которое вы пишете. Если текст будет в основном статичным и использоваться в качестве ярлыков или диалогов в пользовательском интерфейсе, то NSTextField должен работать нормально. Если вам нужны фантастические анимации, то более подходящим может быть CATextLayer. Если вы пишете игру (например, пасьянс), пользовательские интерфейсы будут иметь тенденцию быть более похожими и использовать CATextLayer, а CoreAnimation будет иметь смысл. Если вы пишете более общее приложение, такое как клиент чата, интерфейсы и способы взаимодействия пользователя с приложением значительно отличаются, и, вероятно, имеет смысл использовать NSTextFields или NSTextViews.

Опять же, все зависит от типа приложения, которое вы создаете, но если это более традиционное приложение, например, пример клиента чата, то я бы подумал, что с помощью CATextLayer и необходимости создавать все в интерфейсе программно, а чем использование NSTextField и укладка материала в файл с пивом, означают сотни других строк кода. С другой стороны, если приложение больше похоже на пример игры с пасьянсом, а размеры слоев и свойств определяются таким образом, чтобы учитывать, на какой платформе работает приложение, тогда вы, вероятно, могли бы сэкономить много кода ,

Для записи NSTextField, вероятно, является ближайшим эквивалентом класса AppKit к UILabel. NSTextView - это более тяжеловесный класс, который вам вообще нужен, только если вы хотите делать полные абзацы и более сложные настройки. Часть того, что делает вес NSTextField более легким, заключается в том, что они имеют тенденцию делиться невидимым, одиночным NSTextView (или его суперклассом, NSText) в качестве редактора полей, который помогает при вводе текста. Поскольку только одно текстовое поле в приложении может иметь фокус за один раз, он может совместно использовать общий редактор полей, чтобы повысить производительность.

1

Есть еще один недостаток, который вам нужно знать (или будущие люди приходят посмотреть эту тему). При использовании UILabel вся доступность предоставляется бесплатно через UIAccessibility. Для CATextLayer вам нужно будет все справиться самостоятельно: коснитесь внутри, accessibilityLabel, положение в списке accessibilityElements ...