UILabel / NSTextView против CATextLayer - PullRequest
8 голосов
/ 15 января 2011

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

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

Вариант 2. Использование CATextLayers на обеих платформах как часть общей стратегии, позволяющей максимально эффективно работать на обеих из них.

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

РЕДАКТИРОВАТЬ: Это игра. Пользователь никогда не вводит текст - но игра выводит некоторые, например, оценки.

Ответы [ 2 ]

13 голосов
/ 16 января 2011

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

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

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

2 голосов
/ 24 июля 2017

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

...