как поставить UISlider вертикально? - PullRequest
42 голосов
/ 04 марта 2010

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

Ответы [ 5 ]

104 голосов
/ 04 марта 2010

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

- (void)viewDidLoad {

    [super viewDidLoad];

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

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

30 голосов
/ 29 июня 2012

Начиная с Xcode 4.2, вы можете вроде сделать то же самое в Интерфейсном Разработчике.

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

К сожалению, в Интерфейсном Разработчике он по-прежнему будет горизонтальным.

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

6 голосов
/ 20 января 2017

Свифт 3:

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

// Используйте 1.5, чтобы инвертировать тень ползунка, если хотите

4 голосов
/ 06 марта 2014

Если вы работаете с автоматическими макетами:

В вашем представленииDidLoad попробуйте:

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. Возможно, вам придется изменить его размер вручную, установив его свойство frame.

0 голосов
/ 21 июня 2018

Использование наблюдателей IBOutlet и сеттера. Если вы хотите, чтобы максимум был внизу, разделите число на положительное 2

@IBOutlet weak var slider: UISlider! {
    didSet {
        slider.transform = CGAffineTransform(rotationAngle: .pi / -2)
    }
}
...