是否可以将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)拇指在移动时没有突出显示。
答案 0 :(得分:0)
您可以使用方法- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value
来获取拇指的大小,以便将其考虑在内。
highlighted
和/或selected
设置为true,或者在滑块上调用becomeFirstResponder
?
您可以通过beginTrackingWithTouch:withEvent:
方法和其他相关方法将所有UITouch事件传递给它,从而让滑块认为它被触摸了。