2013-12-24 4 views
13

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

self.slider.transform = CGAffineTransformMakeRotation(M_PI_2); 

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


enter image description here

+0

http://stackoverflow.com/ a/11261831/614154 Решение работает для меня. – Lion

ответ

10

Я получил его на работу следующим образом:

В viewDidLoad: я добавил

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

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

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

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

2

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

0

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

0

Вы не можете использовать раскадровку для создания 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]; 
0

Попробуйте это: -

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

10

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

enter image description here

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

  1. vSlider.Center Y = Y Изображение View.Center
  2. vSlider.Width = Image View.Height
  3. vSlider.Center X = Изображение.Скользящий + 16

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

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

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

1

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

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

  2. определять autoLayout ограничения относительно ползуна в раскадровке явно, как все, что вам нравится

0

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

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

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

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

шаг коды) Тогда просто добавили к моему viewWillAppear (Свифт-коду):
let trans = CGAffineTransformMakeRotation(CGFloat(M_PI_2)); slider.transform = trans;

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