Вертикальный UISlider в iOS с автозапуском

В соответствии с моим требованием к iPad, я должен показать UISlider вертикально.
Я использую компилятор iOS7, а целью развертывания является iOS6.
На доске объявлений я добавил горизонтальный UISlider шириной 600 пикселей. Я создал IBOutlet в своем контроллере. Я не устанавливал ограничений автоматического макета. Я использую приведенный ниже код, чтобы повернуть его и сделать его вертикальным.

self.slider.transform = CGAffineTransformMakeRotation(M_PI_2);

После ротации и до начала печати я печатаю размер рамки слайдера, который является правильным. Но слайдер выглядит неправильно. Его просто показывает только ручку в центре. Как я могу повернуть UISlider?


enter image description here

Ответ 1

У меня это получилось так:

В viewDidLoad: я добавил

[self.slider removeConstraints:self.slider.constraints];
[self.slider setTranslatesAutoresizingMaskIntoConstraints:YES];

чтобы он вызывал перед вращением ползунка с

self.slider.transform=CGAffineTransformRotate(self.slider.transform,270.0/180*M_PI);

и нет необходимости удалять и повторно добавлять его в супервизор.

Ответ 2

У меня есть вертикальный слайдер, работающий с iOS 8 и Xcode 6 с 3 ограничениями в раскадровке и одной строке кода. Здесь обрезанный скринкап интерфейса:

enter image description here

Между вертикальным слайдером и UIImageView рядом с ним есть 3 ограничения:

  • vSlider.Center Y = Изображение View.Center Y
  • vSlider.Width = Изображение View.Height
  • vSlider.Center X = Image View.Trailing + 16

И, конечно, одна строка кода:

self.vSlider.transform = CGAffineTransformMakeRotation(-M_PI_2);

Легко настроить эти ограничения в раскадровке в Xcode 6, но я думаю, что было бы просто написать эти ограничения в коде для поддержки iOS 7 или 6.

Ответ 3

Снимите флажок Auto-Layout на вашем ViewController, в SDK 7.0 нет другого параметра, чтобы он работал вертикально: (

Ответ 4

Существует множество возможных решений относительно вертикальной ориентации UISlider. Вот мое резюме для iOS7 в XCode5 с включенным автозапуском (по умолчанию в раскадровке):

  • в viewDidLoad добавить метод self.slider.transform = CGAffineTransformMakeRotation(M_PI_2);

  • Определите ограничения autoLayout о слайдере явно в раскадровке, как вам нравится

2014.8.27

Ответ 5

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

Ответ 6

Вы не можете использовать раскадровку для создания UISlider. Создайте UISlider путем кодирования.

slider = [[UISlider alloc] initWithFrame:CGRectMake(640, 150, 600, 400)];
[slider.layer setAnchorPoint:CGPointMake(0.0f, 0.0f)];
slider.transform = CGAffineTransformMakeRotation(M_PI/2);
[self.view addSubview:slider];

Ответ 7

Попробуйте следующее: -

self.slider.transform = CGAffineTransformRotate (slideToUnlock.transform, -90,0/180 * M_PI);

Ответ 8

Попробуйте ввести код для поворота UISlider в вертикальном положении.

//To rotate the slider in Vertical Position
CGAffineTransform sliderRotation = CGAffineTransformIdentity;
sliderRotation = CGAffineTransformRotate(sliderRotation, -(M_PI / 2));
sliderBrightness.transform=sliderRotation;

Ответ 9

Для меня двухступенчатый процесс работал лучше всего (включая некоторые из предыдущих решений)

Шаг автоотключения) Я добавил вертикальный вид в IB и использовал автозапуск, чтобы связать его с соседними видами. Затем я добавил слайдер в представление и просто подключил его к центру представления. Затем подключите ширину ползунка к высоте представления. Наконец, управление - перетащил выход слайдера на мой код ViewController (как слайдер)

Шаг кода) Затем просто добавили в мой viewWillAppear (быстрый код):
let trans = CGAffineTransformMakeRotation(CGFloat(M_PI_2)); slider.transform = trans;