2010-03-04 3 views
42

Я хочу поставить UISlider по вертикали. Я понятия не имею об этом, поэтому, пожалуйста, помогите мне в этом.как поставить UISlider вертикально?

+3

это дубликат этого вопроса спросил вчера: http://stackoverflow.com/questions/ 2369926/how-can-i-make-a-vertical-uislider –

ответ

103

Вы должны сделать это программно. Предполагая, что ваш UISlider привязан к переменной с именем slider, добавьте этот код в методе viewDidLoad в ViewController.m:

- (void)viewDidLoad { 

    [super viewDidLoad]; 

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

Позвольте мне знать, если вам нужна дополнительная помощь по этому вопросу ..

+40

Это помещает endValue в верхнюю часть. Используйте M_PI * -0.5, чтобы поместить конец минимума в нижней части. –

+0

Полезное примечание. Это самый распространенный сценарий. Спасибо, chrispix. – ravinsp

+2

Вы также можете использовать -M_PI_2 –

30

По Xcode 4.2, вы можете вид сделать то же самое в Interface Builder.

  • Создать ползунок
  • Покажите «Удостоверение инспектора»
  • Добавить «User Defined время выполнения Атрибут»
  • Установите ключ путь к «layer.transform.rotation.z», типа, как «String» ( «Номер» не допускает значений с плавающей запятой) (возможно с Xcode 5) и значение «-1.570795» (-π/2).

К сожалению, он по-прежнему будет отображаться как горизонтальный в Interface Builder.

Но вы можете позиционировать центр и не создавать собственный класс, поэтому в некоторых случаях он может быть достаточно полезен. Эффект такой же, как и код ravinsp.

+0

На самом деле вы можете поместить float в Number с запятой (вместо точки). – user500

+0

Гораздо чище, чем принятый, основанный на кодах ответ, ИМХО. – user1021430

4

В случае, если работа с авто раскладок:

В вашем viewDidLoad, попробуйте:

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]; 

Он не работает с ограничениями, поэтому хитрость заключается в том, чтобы удалить ограничения для uislider. Возможно, вам придется изменить его размер вручную, установив его свойство рамки.

5

Swift 3:

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

// Использование 1,5 инвертировать тени ползунка, если вы хотите

Смежные вопросы