1

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

我的应用程序的设置方式我有一个UIView占据整个屏幕的容器。在容器内,我UIView在底部边缘有另一个屏幕外(我称之为底部栏)。在 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) 拇指在移动时没有突出显示。

4

1 回答 1

0

您可以使用该方法- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value来获取拇指的大小以考虑到这一点。

不过,我不确定您将如何突出拇指。我想你已经尝试过所有正常的事情,比如设置highlighted和/或selected为真,或者调用becomeFirstResponder滑块?

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

于 2010-03-18T02:07:03.340 回答