2010-03-04 15 views
42

Voglio mettere UISlider in verticale. Non ne ho idea, quindi per favore aiutami per questo.come mettere UISlider verticale?

+3

Questo è un duplicato di questa domanda ha chiesto ieri: http://stackoverflow.com/questions/ 2369926/how-can-i-make-a-vertical-uislider –

risposta

103

È necessario eseguire questa operazione in modo programmatico. Assumendo che l'UISlider è associato a una variabile chiamata slider, aggiungere questo codice nel tuo metodo di viewDidLoad in ViewController.m:

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    CGAffineTransform trans = CGAffineTransformMakeRotation(M_PI * 0.5); 
    slider.transform = trans; 
} 

Fatemi sapere se avete bisogno di più aiuto su questo ..

+40

Ciò pone la fine del valore minimo in alto. Utilizzare M_PI * -0.5 per posizionare la fine del valore minimo nella parte inferiore. –

+0

Nota utile. Questo è lo scenario più comune. Grazie chrispix. – ravinsp

+2

È inoltre possibile utilizzare -M_PI_2 –

30

Come di Xcode 4.2, è possibile ordinare in Interface Builder.

  • Creare uno slider
  • mostrare il "ispettore identità"
  • Aggiungere un "User Defined Attribute Runtime"
  • Impostare il percorso chiave per "layer.transform.rotation.z", il tipo come "String" ( "Numero" non consente valori in virgola mobile) (possibile poiché Xcode 5) e il valore su "-1.570795" (-π/2).

Sfortunatamente, apparirà ancora orizzontale in Interface Builder.

Ma è possibile posizionare il centro e non è necessario creare una classe personalizzata, quindi in alcuni casi potrebbe essere utile. L'effetto è lo stesso del codice di Ravinsp.

+0

In realtà puoi mettere il float in Numero con una virgola (invece di un punto). – user500

+0

Molto più pulito rispetto alla risposta accettata, basata su codice, IMHO. – user1021430

4

Nel caso in cui si lavora con i layout auto:

Nella tua viewDidLoad, provare:

UIView *superView = self.sizeSlider.superview; 
[self.sizeSlider removeFromSuperview]; 
[self.sizeSlider removeConstraints:self.view.constraints]; 
self.sizeSlider.translatesAutoresizingMaskIntoConstraints = YES; 
self.sizeSlider.transform = CGAffineTransformMakeRotation(M_PI_2); 
[superView addSubview:self.sizeSlider]; 

Non funziona con i vincoli, in modo che il trucco è quello di rimuovere i vincoli per il vostro uislider. Potrebbe essere necessario ridimensionarlo manualmente impostando la sua proprietà frame.

5

Swift 3:

slider.transform = slider.transform.rotated(by: CGFloat(0.5 * Float.pi)) 

// Usa 1.5 Per invertire l'ombra del cursore se si desidera