2011-01-15 19 views
7

Ho un'app iOS che sto convertendo in un'app iOS/Mac. Nella versione iOS, ho usato UILabels per il mio testo. Ovviamente, non posso farlo sul mac. Vedo due opzioni:UILabel/NSTextView vs. CATextLayer

Opzione 1: utilizzare UILabels su iOS e NSTextView su Mac.

Opzione 2: utilizzare CATextLayers su entrambe le piattaforme, come parte di una strategia generale per rendere il più possibile il lavoro su entrambi.

Ovviamente, l'opzione 2 ha un grande vantaggio che ci sarebbe meno codice da mantenere. La mia domanda è: l'opzione 1 ha dei vantaggi di cui dovrei essere a conoscenza? In particolare, CATextLayer ha degli svantaggi che UILabel e NSTextView non hanno?

EDIT: È un gioco. L'utente non inserisce mai testo, ma il gioco ne mostra alcuni, ad esempio, i punteggi.

risposta

10

Dipende da come si intende utilizzare il testo e il tipo di applicazione che si sta scrivendo. Se il testo sarà principalmente statico e utilizzato come etichette o finestre di dialogo nell'interfaccia utente, allora NSTextField dovrebbe funzionare correttamente. Se hai bisogno di animazioni fantasiose, allora CATextLayer potrebbe essere più appropriato. Se stai scrivendo un gioco (solitario, per esempio), le UI tenderanno ad essere più simili e usando CATextLayer e CoreAnimation avrebbe senso. Se stai scrivendo un'applicazione più generale come un client di chat, le interfacce e i modi in cui l'utente interagisce con l'app sono molto diverse e probabilmente avrebbe più senso usare NSTextFields o NSTextViews.

Ancora, tutto dipende dal tipo di app che si sta creando, ma se si tratta di un'app più tradizionale come l'esempio del client di chat, allora penserei che usando CATextLayer e dovendo creare tutto nell'interfaccia a livello di programmazione, piuttosto che usare NSTextField e mettere le cose in un file di pennino, significherebbe centinaia di più linee di codice. D'altra parte, se l'app è più simile all'esempio del solitario, e le dimensioni dei layer e delle proprietà sono definite in un modo che tiene conto della piattaforma su cui è in esecuzione l'app, probabilmente potresti risparmiare molto codice .

Per la registrazione, NSTextField è probabilmente la classe di AppKit equivalente più vicina a UILabel. NSTextView è una classe più pesante che in genere è necessaria solo se si desidera eseguire paragrafi completi e tipi di composizione più avanzati. Una parte di ciò che rende il peso leggero NSTextField è che tendono a condividere un singolo NSTextView invisibile (o la sua superclasse, NSText) come editor di campi, che aiuta con l'immissione di testo. Poiché solo un campo di testo in un'app può essere attivo contemporaneamente, è possibile condividere un comune editor di campi per migliorare le prestazioni.

1

C'è un altro svantaggio di cui è necessario essere a conoscenza (o alle persone future che vengono a vedere questo thread). Quando si utilizza UILabel, tutta l'accessibilità viene fornita gratuitamente tramite UIAccessibility. Per CATextLayer, dovrai gestire tutto da solo: touch inside, accessibilityLabel, la posizione nell'elenco di accessibilityElements ...

Problemi correlati