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

Когда я добавляю свой ползунок как подпредставление любого представления, кроме 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 ответа

Решение

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

[submenu setUserInteractionEnabled:YES];

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

Поскольку свойство 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];

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

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

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

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

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

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

Другие вопросы по тегам