iPhone:激活UISlider并以编程方式将其值设置为当前触摸的位置

时间:2010-03-18 00:55:15

标签: iphone xcode touch uislider

是否可以将UISlider设置为第一响应者并以编程方式将其当前值设置为当前触摸的位置?

我的应用设置方式我有一个UIView容器占据了整个屏幕。在容器内部,我在底部边缘有另一个UIView屏幕外(我称之为bottomBar)。在bottomBar里面有一个UISlider元素。

这个想法是当用户沿着屏幕的底部边缘滑动时,带有滑块的bottomBar移动到视图中。我想要实现的是激活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;  
}

我在上面的代码中遇到的两个具体问题是:a)拇指没有完全正确定位,因为它忽略了拇指的长度,b)拇指在移动时没有突出显示。

1 个答案:

答案 0 :(得分:0)

您可以使用方法- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value来获取拇指的大小,以便将其考虑在内。

但是,我不确定你会如何突出显示拇指。我想你已经尝试过所有正常的事情,比如将highlighted和/或selected设置为true,或者在滑块上调用becomeFirstResponder

您可以通过beginTrackingWithTouch:withEvent:方法和其他相关方法将所有UITouch事件传递给它,从而让滑块认为它被触摸了。