2010-08-16 2 views

risposta

20

+1 per la risposta di Ben, sebbene la rotazione del controllo segmentato ruoti anche il testo all'interno. Mai aver paura! Non ci resta che ruotare le etichette all'interno, in questo modo:

NSArray *arr = [segmentedControl subviews]; 
    for (int i = 0; i < [arr count]; i++) { 
    UIView *v = (UIView*) [arr objectAtIndex:i]; 
    NSArray *subarr = [v subviews]; 
     for (int j = 0; j < [subarr count]; j++) { 
      if ([[subarr objectAtIndex:j] isKindOfClass:[UILabel class]]) { 
       UILabel *l = (UILabel*) [subarr objectAtIndex:j]; 
       l.transform = CGAffineTransformMakeRotation(- M_PI/2.0); //do the reverse of what Ben did 
      } 
     } 
    } 

Swift 2 versione:

for view in segmentedControl.subviews { 
    for subview in view.subviews { 
     if subview.isKindOfClass(UILabel) { 
      subview.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI/2.0)) 
     } 
    } 
} 
+1

Funziona bene per le etichette, ma se il tuo controllo ha invece immagini, non funziona. In tal caso, seguirei il suggerimento di Ben, quindi ruotate semplicemente le immagini nello strumento OSX Preview (o Photoshop) invece di provare a ruotare UIImageView nel codice. –

+1

Questo codice si basa sull'implementazione interna (non documentata) di UISegmentedControl. È soggetto a guasti ogni volta che Apple cambia l'implementazione di questo controllo. Anche una semplice modifica, come l'inserimento di un ulteriore livello di viste tra le istanze UILabel che stai cercando e il livello più alto, infrange questo codice. – Arda

+0

@Arda Potrebbe rompersi, ma ci vorrebbero circa 10 minuti per inventare il tuo controller segmentato che ha fatto la stessa cosa se così fosse, quindi fallo e divertiti. Più che probabile, sarai sempre in grado di trovare un modo per farlo se qualcosa è cambiato comunque. – Sethmr

4

Questo controllo è solo orizzontale. Dalla documentazione UISegementedControl:

Un UISegmentedControl oggetto è un controllo orizzontale in molteplici segmenti, ogni segmento operare da un pulsante discreto. Un controllo segmentato offre un mezzo compatto per raggruppare insieme un numero di controlli.

Dovrete farlo come controllo personalizzato.

22

È sempre possibile modificare la trasformazione sul controllo segmentato.

segmentedControl.transform = CGAffineTransformMakeRotation (M_PI/2.0);

+0

+1 per rispondere alla domanda :). Mi chiedo dell'usabilità di un controllo segmentato ruotato. – RedBlueThing

+0

Sì, non stavo giudicando se fosse una buona idea o meno ;-) –

+0

@ ben-gottlieb Una qualità ammirevole :) – RedBlueThing

0

ho trovato il controllo di seguito nei controlli di cacao, che sembra piacevole. È un controllo personalizzato e si presenta come una sottoclasse di UIControl.

smverticalsegmentedcontrol

Ma se mi chiedete, io possa tentare un approccio diverso, creerò un tabelview con una larghezza di colonna (44px) e tenerlo come un bambino nel contenitore e può allinearlo a un angolo del contenitore, personalizzare le celle e avere il mio elenco su quello e alla spina di ogni riga, caricare il contenuto corrispondente nella visualizzazione dei dettagli nella tua contentview. Non provato, proverà a pubblicare i risultati a breve.