Вертикальный 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;