我有一个284像素宽的UISlider,范围为0-25。用户需要选择一个小数位1(例如12.3)的值,这可以通过滚动手指小心谨慎,但是当你抬起手指时它很狡猾并且往往会改变值。
我正在尝试对其进行排列,以便您可以通过点击拇指上方或下方的滑块导轨将滑块上下滑动0.1圈。我确信这是可能的,但由于这是我的第一个xcode项目,我正在努力。谁能指出我正确的方向?
答案 0 :(得分:4)
我认为更好的解决方案只是将UISlider子类化并重新实现
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
当触摸事件在滑块边界内时返回YES。
答案 1 :(得分:2)
iPhone OS'UISlider控件的一个长期存在的问题是你不能让它更高。更具体地说,您可以通过为其拇指和轨道指定更高的图像使其看起来更高,但触摸区域保持为23px高。
你需要做的是UISlider的子类,并在你的类中覆盖pointInside:
// How many extra touchable pixels you want above and below the 23px slider
#define SIZE_EXTENSION_Y 10
- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event {
CGRect bounds = self.bounds;
bounds = CGRectInset(bounds, 0, SIZE_EXTENSION_Y);
return CGRectContainsPoint(bounds, point);
}
在Interface Builder中,设置滑块以使用新的UISlider子类,现在你有一个43xx可触摸高度的滑块。
答案 2 :(得分:1)
我想到了几个选项:
我不确定创建非标准(特别是不可见!)的实现是一个好主意,但是 - 我建议你添加可见按钮进行微调。向侧面的简单向上箭头/向下箭头可能会有所帮助。还要考虑UISlider是否符合您的要求,因为它对您来说效果不佳。
答案 3 :(得分:0)
在Interface Builder中,您无法设置UISlider的高度,因为它已修复。但是在您设置拇指图像和轨迹图像值的代码中,您可以设置框架高度,如下所示。这将打开对触摸敏感的区域。
CGRect sliderFrame = self.mySlider.frame;
sliderFrame.size.height = 42.0;
[self.mySlider setFrame:sliderFrame];