2011-01-15 16 views
7

Ich habe eine iOS App, die ich in eine iOS/Mac App umwandeln möchte. In der iOS-Version habe ich UILabels für meinen Text verwendet. Offensichtlich kann ich das nicht auf dem Mac machen. Ich kann zwei Optionen sehen:UILabel/NSTextView vs. CATextLayer

Option 1: Verwenden Sie UILabels auf iOS und NSTextView auf dem Mac.

Option 2: Verwenden Sie CATextLayers auf beiden Plattformen als Teil einer allgemeinen Strategie, um so viel wie möglich an beiden zu arbeiten.

Offensichtlich hat Option 2 den großen Vorteil, dass weniger Code gepflegt werden muss. Meine Frage ist - hat Option 1 irgendwelche Vorteile, die ich beachten sollte? Hat CATextLayer insbesondere Nachteile, die UILabel und NSTextView nicht haben?

EDIT: Es ist ein Spiel. Der Benutzer gibt niemals Text ein, aber das Spiel gibt zum Beispiel einige Punkte aus.

Antwort

10

Es hängt davon ab, wie Sie den Text und die Art der Anwendung verwenden möchten, die Sie schreiben. Wenn der Text hauptsächlich statisch ist und als Beschriftungen oder Dialoge in der Benutzeroberfläche verwendet wird, sollte NSTextField in Ordnung funktionieren. Wenn Sie ausgefallene Animationen benötigen, dann ist CATextLayer möglicherweise besser geeignet. Wenn Sie ein Spiel schreiben (Solitaire zum Beispiel), werden die UIs ähnlicher und die Verwendung von CATextLayer und CoreAnimation sinnvoll. Wenn Sie eine allgemeinere Anwendung wie einen Chat-Client schreiben, sind die Schnittstellen und Möglichkeiten, mit denen der Benutzer mit der App interagiert, sehr unterschiedlich, und es wäre wahrscheinlich sinnvoller, NSTextFields oder NSTextViews zu verwenden.

Auch dies hängt alles von der Art der App, die Sie erstellen, aber wenn es eine traditionelle App wie das Chat-Client-Beispiel ist, würde ich denken, dass mit CATextLayer und alles in der Schnittstelle programmatisch zu erstellen, eher als NSTextField zu verwenden und Sachen in einer Nib-Datei auszugeben, würde Hunderte von mehr Zeilen Code bedeuten. Auf der anderen Seite, wenn die App eher dem Solitaire-Spiel ähnelt und die Dimensionen der Layer und Eigenschaften so definiert sind, dass die Plattform, auf der die App läuft, berücksichtigt wird, könnte man wahrscheinlich viel Code sparen .

Für den Datensatz, NSTextField ist wahrscheinlich die nächste entsprechende AppKit-Klasse UILabel. NSTextView ist eine schwerere Klasse, die Sie im Allgemeinen nur benötigen, wenn Sie vollständige Absätze und erweiterte Schriftsatz tun möchten. Ein Teil von dem, was NSTextField leichter macht, ist, dass sie dazu neigen, eine unsichtbare, einzige NSTextView (oder ihre Oberklasse, NSText) als Feld-Editor zu teilen, die bei der Texteingabe hilft. Da nur ein Textfeld in einer App gleichzeitig den Fokus haben kann, kann ein gemeinsamer Feld-Editor zur Verbesserung der Leistung verwendet werden.

1

Es gibt einen weiteren Nachteil, auf den Sie achten sollten (oder zukünftige Leute, die kommen, um diesen Thread zu sehen). Bei Verwendung von UILabel wird die gesamte Barrierefreiheit durch UIAccessibility kostenlos zur Verfügung gestellt. Für CATextLayer müssen Sie alles selbst verwalten: Berühren Sie die Eingabehilfe, die Position in der Liste der Eingabehilfen ...

Verwandte Themen