UISlider не будет работать, когда он станет подпредставлением UIView другого self.view - PullRequest
5 голосов
/ 27 августа 2011

Когда я добавляю свой слайдер как подпредставление любого представления, кроме self.view, оно не работает (не скользит), но работает нормально, когда оно является подпредставлением self.view.Вы можете видеть это на других представлениях, кроме self.view, но он не работает.

Вот мой код:

alphaSlider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 90, 10)];
    [alphaSlider setMinimumValue:0.01];
    [alphaSlider setMaximumValue:1];
    [alphaSlider setValue:0.5];
    [alphaSlider setUserInteractionEnabled:YES];
    [alphaSlider addTarget:self action:@selector(alphaSliderDidChange:) forControlEvents:UIControlEventValueChanged];
    alphaSlider.continuous = YES;
[submenu addSubview:alphaSlider];

Есть ли способ это исправить?

Ответы [ 3 ]

9 голосов
/ 29 апреля 2015

Убедитесь, что высота рамки ползунка не слишком мала, чтобы обеспечить взаимодействие.10 pt, вероятно, слишком мало.

Начиная с iOS 8, мои ползунки также перестали работать.

В прошлом высота кадра UIViews, таких как UISlider, UISwitch и UIPickerView, была зафиксирована накакое-то заранее определенное значение.Вы можете установить высоту кадра, но это будет игнорироваться.Вместо того, чтобы пытаться вспомнить «Какова высота UISlider в альбомной ориентации на iPad / iPhone?», Я установил высоту на 0 и позволил ОС назначить значение по умолчанию.

Ответ Дэвида Брауна привел меня к пониманию, что мои фреймы UISlider имели высоту 0, что отключало взаимодействие с пользователем.

9 голосов
/ 27 августа 2011

Возможно, подменю не включено для взаимодействия с пользователем.

[submenu setUserInteractionEnabled:YES];

Другая возможность состоит в том, что рамка ползунка находится за пределами подменю.frame

Поскольку свойство clipsToBounds объекта UIViews по умолчанию имеет значение NO, ползунок не будет обрезан, несмотря на то, что он находится за рамкой подменю. Это означает, что рамка подменю не покрывает ползунок, и нет способа передать сенсорные события из подменю в ползунок подменю. Установите цвет фона подменю и убедитесь, что ползунок полностью расположен в рамке подменю.

[submenu setBackgroundColor:[UIColor blueColor]];

Кадр подменю может выглядеть примерно так (0, 0, 0, 0).

Включить

NSLog(@"%f, %f, %f, %f", submenu.frame.origin.x, submenu.frame.origin.y, submenu.frame.size.width, submenu.frame.size.height);

Вы могли бы также сделать

[submenu setClipsToBounds:YES];

и если ползунок исчезнет, ​​то рамка подменю будет плохой.

0 голосов
/ 20 февраля 2018

У меня была похожая проблема, когда у ползунка не было горизонтальной линии, только белая кнопка и вообще не реагировала. Исходя из вышеизложенного, я понял, что мои слайдеры были шире, чем моя безопасная область. Установите некоторые ограничения на 2 стороны, и теперь это работает просто отлично.

...