Я хочу создать вертикальный UISlider
и точно поместить его в существующий вид контейнера, размер которого помещен в файл .xib
, используя autoLayout
. Но я просто не могу заставить его работать, и у меня гугли мои пальцы кровавые.Установите вертикальный UISlider в существующий вид контейнера?
Самый близкий, который я получил, создает слайдер, который слишком длинный и выходит за пределы экрана.
Я помещаю код в неположенное место?
Я помещаю свой код в "layOutSubviews"
некоторых точек интереса:
документов 1.Per компании Apple, вид в «кадр» не является действительным после преобразования и не должен быть установлен.
2. Рамка ползунка установлена в размеры будущего родителя до преобразование (с заменой x и y).
3. Преобразованный вид, как представляется, сохраняет свои границы в кадре координат предварительного преобразования. т. е. после 90-градусного преобразования ширина и высота границ преобразованного представления, по-видимому, меняются местами.
Этот код не работает. Ползунок выглядит правильно, за исключением того, что он распространяется в нижней части экрана. Ограничения ползунка и даже фрейм (который Apple говорит недействительно), похоже, соответствуют границам и рамке представления контейнера. Ползунок даже не остается в пределах своих границ.
[super layoutSubviews];
CGRect trigLevelSliderFrame=self.trigLevelSliderContainer.bounds;
trigLevelSliderFrame.size.height=self.trigLevelSliderContainer.bounds.size.width;
trigLevelSliderFrame.size.width=self.trigLevelSliderContainer.bounds.size.height;
UISlider *mySlider=[[UISlider alloc] initWithFrame:trigLevelSliderFrame];
self.trigSlider=mySlider;
[mySlider release];
self.trigSlider.transform=CGAffineTransformMakeRotation(-M_PI_2);
CGPoint center=CGPointMake(self.trigLevelSliderContainer.bounds.size.width/2,self.trigLevelSliderContainer.bounds.size.height/2);
self.trigSlider.center=center;
[self.trigLevelSliderContainer addSubview:self.trigSlider];
Я не понимаю этого решения проблемы, но ваш ответ дал мне надежду найти мое собственное решение, которое я сделал. Если бы вы могли добавить к вашему ответу соответствующий код, это было бы здорово! Это определенно оказалось для меня проблемой «времени» ... Я просто переключил проблемный код на функцию 'viewDidAppear', которая загружалась позже и правильно для разных размеров экрана. – PlateReverb
Я рад, что помог кому-то. Моя память об этом расплывчата; но, насколько я помню, я помещал ползунок в содержащий вид, который был размером и формой конечного слайдера. Я сделал это, чтобы использовать автоматическую компоновку. Затем я программно поместил ползунок в представление контейнера, а затем преобразовал его в соответствии с размерами вида контейнера. Моя ошибка заключалась в добавлении ползунка к виду контейнера и вращении его в неправильном месте - до того, как был выложен контейнерный вид. Я попытаюсь изменить свой ответ, чтобы быть более ясным. – PaulB
Как вы знаете, какой порядок между планируемым контейнером и вашим кодом вращает ползунок? Порядок работы с автозапуском/IB и функциями 'viewDidLoad' является для меня полной тайной (до моей проблемы, я предположил, что IB/autolayout всегда будет первым.Вот ссылка на мою конкретную проблему (и «хакерское» решение), если вы заинтересованы: http://stackoverflow.com/questions/41734256/uislider-handle-changes-width-on-different-size-ipads – PlateReverb