17

Sono nuovo nello sviluppo di iOS, ma per iniziare a realizzare anche le app più rudimentali utilizzando lo script mongolo verticale, ho bisogno di avere uno UITextView verticale. Non ho trovato altri sviluppatori di app mongoli che condividono il loro codice, quindi sto provando a farlo da solo. Mongolo è scritto da cima a fondo e linee avvolgere da sinistra a destra, come illustrato nel grafico seguente:Come creare un UITextView verticale sottoclassandolo da UIScrollView in Swift?

enter image description here

scorrimento deve essere orizzontale (sinistra a destra).

In un previous question ho proposto una combinazione di un carattere con mirroring e una rotazione e il mirroring di UITextView (perché è quello che avevo fatto in Android). Tuttavia, dopo aver letto this answer e compiuto ulteriori ricerche sul modo di fare iOS (come l'uso di TextKit), penso che potrebbe essere meglio creare qualcosa come UIVerticalTextView da zero invece di fare i conti con il normale UITextView. E dal momento che vedo che UITextView inheirits from UIScrollView, presumo che dovrei sublassificare UIScrollView per rendere il UIVerticalTextView.

dove mi trovo in ora

Il answer I mentioned above sottoclasse UIView ma ho avuto un sacco di problemi a scorrimento per funzionare. Questo è un altro motivo per cui voglio sottoclasse UIScrollView. Anche quella soluzione non ha rinviato le parole in ogni riga quando c'era un cambiamento di orientamento.

che ho raccolto i seguenti pezzi, ma non sono sicuro come metterli insieme:

  • NSTextStorage - non ci dovrebbe essere nulla di diverso con questo. Memorizzerà solo il testo Unicode mongolo e tutte le informazioni sullo stile.
  • NSTextContainer - L'altezza e la larghezza devono essere cambiate per dare la dimensione del contenitore del testo verticale. (Penso di sì, comunque. A meno che non si possa fare altrove.)
  • NSLayoutManager - Qualcosa di speciale deve essere fatto qui o è quello curato dallo UIVerticalTextView?
  • UIVerticalTextView - Questa sarà una sottoclasse di UIScrollView ma quali sono i metodi che devono essere aggiunti e/o sovrascritti?

    class UIVerticalTextView: UIScrollView { 
    
        // Which properties to include? 
        //  - TextStorage 
        //  - TextContainer 
        //  - LayoutManager 
    
        // which methods to override? 
    
        // which methods to add to give minimal functionality like UITextView? 
        //  - init 
        //  = text 
    } 
    

Aggiornamenti

Queste domande sono tentativi di rompere il problema in parti più piccole:

E cercando con un approccio diverso:

+0

Come si desidera visualizzare i caratteri? Hai un font? –

+0

@NilsZiehn Sì, ho un font con glifi mongoli. Per semplicità, tuttavia, si può presumere che debba essere visualizzato solo l'inglese. – Suragch

+0

Quali problemi hai avuto con CGAffineTransformMakeRotation? Stavo scavando attraverso le tue domande correlate e ho visto che avevi giocato con questo. –

risposta

5

Se si dispone di un tipo di carattere che visualizza il testo il modo più semplice sarebbe quella di utilizzare l'UITextView normale:

UITextView *textView = [[UITextView] alloc] init]; 

textView.transform = CGAffineTransformMakeRotation(-M_PI/2); 

textView.text = @"YOUR TEXT HERE"; 

[textView setBaseWritingDirection:UITextWritingDirectionRightToLeft forRange:[textView textRangeFromPosition:[textView beginningOfDocument] toPosition:[textView endOfDocument]]]; 

Il textView sarà ora scorrere a destra non verso il basso, suppongo che si suppone capita per mongolo?

+1

Hai ragione nel presupporre che lo scorrimento orizzontale sia necessario. Tuttavia, i layout da destra a sinistra sono progettati per l'arabo, l'ebraico e altri linguaggi RTL. Queste lingue sono in realtà bidirezionali perché i numeri e le parole inglesi (e mongole) che sono incorporate nel testo sono ancora scritte in LTR. E anche se fosse veramente RTL, le parole sarebbero state pronunciate all'indietro e per i mongoli i glifi non corrispondevano alla lettera successiva (a meno che non avessi usato un font con specchiature orizzontali). – Suragch

+0

Un altro problema che ho riscontrato provando a fare una rotazione è che il layout diventa molto complicato. – Suragch

+0

Purtroppo non capisco davvero il motivo per cui dovresti invertire i tuoi glifi, perché le lettere arabe non vengono specchiate quando vengono visualizzate, giusto? (Se lo sono, ho capito il tuo punto ..). Puoi mostrarmi uno screenshot del risultato quando usi semplicemente un UITextView normale con UITextWritingDirectionRightToLeft? (e come dovrebbe apparire in confronto) –

Problemi correlati