iPhone: активируйте UISlider и установите его значение в качестве местоположения текущего касания программно - PullRequest
1 голос
/ 18 марта 2010

Можно ли установить UISlider в качестве первого респондента и установить его текущее значение в качестве местоположения текущего касания программно?

Как настроено мое приложение У меня есть UIView контейнер, который занимает весь экран. Внутри контейнера у меня есть еще один UIView вне экрана в нижней части экрана (я назову это bottomBar). Внутри нижней панели находится элемент UISlider.

Идея состоит в том, что когда пользователь проводит по нижнему краю экрана, нижняя панель с ползунком перемещается в представление. То, чего я пытаюсь добиться, - это активировать UISlider и установить положение ползунка (значение) в положение касания пользователя. Это возможно?

Я понял довольно уродливый хак, чтобы сделать это. Но должно быть более элегантное решение, чем это?

CGPoint sliderPos = [touch locationInView:pageSlider];
float newSliderValue = sliderPos.x/pageSlider.frame.size.width*pageSlider.maximumValue;
if (sliderPos.x<=0) {
    pageSlider.value = 0;
}
else if(newSliderValue>=pageSlider.maximumValue) {
    pageSlider.value = pageSlider.maximumValue;
}
else {
    pageSlider.value = newSliderValue;  
}

Две специфические проблемы, с которыми я столкнулся в приведенном выше коде, заключаются в том, что он а) неправильно позиционирует большой палец, поскольку он игнорирует длину большого пальца, и б) большой палец не выделяется при движении.

1 Ответ

0 голосов
/ 18 марта 2010

Вы можете использовать метод - (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value, чтобы получить размер большого пальца, чтобы принять это во внимание.

Хотя я не уверен, как бы ты выделил большой палец. Я полагаю, вы пробовали все обычные вещи, такие как установка highlighted и / или selected в true или вызов becomeFirstResponder на слайдере?

Возможно, вы сможете обмануть слайдер, думая, что к нему прикоснулись, передав ему все свои события UITouch с помощью метода beginTrackingWithTouch:withEvent: и других связанных методов.

...