如何让UISlider响应拇指滑块上方和下方轨道上的点击事件

时间:2010-06-30 19:53:13

标签: iphone cocoa-touch uislider

我有一个284像素宽的UISlider,范围为0-25。用户需要选择一个小数位1(例如12.3)的值,这可以通过滚动手指小心谨慎,但是当你抬起手指时它很狡猾并且往往会改变值。

我正在尝试对其进行排列,以便您可以通过点击拇指上方或下方的滑块导轨将滑块上下滑动0.1圈。我确信这是可能的,但由于这是我的第一个xcode项目,我正在努力。谁能指出我正确的方向?

4 个答案:

答案 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)

我想到了几个选项:

  1. 创建隐藏按钮并将其置于接收这些点击次数
  2. 子类UISlider并拦截touchesBegan等方法。确定是否要根据其位置响应命中,或调用超级功能。您可能需要展开框架以包含您触摸的位置。
  3. 我不确定创建非标准(特别是不可见!)的实现是一个好主意,但是 - 我建议你添加可见按钮进行微调。向侧面的简单向上箭头/向下箭头可能会有所帮助。还要考虑UISlider是否符合您的要求,因为它对您来说效果不佳。

答案 3 :(得分:0)

在Interface Builder中,您无法设置UISlider的高度,因为它已修复。但是在您设置拇指图像和轨迹图像值的代码中,您可以设置框架高度,如下所示。这将打开对触摸敏感的区域。

CGRect sliderFrame = self.mySlider.frame;
sliderFrame.size.height = 42.0;
[self.mySlider setFrame:sliderFrame];