4

我有一个 284 像素宽的 UISlider,范围为 0-25。用户需要选择一个小数点后 1 位的值(比如 12.3),这可以通过滚动你的手指小心地完成,但它很繁琐,并且在你抬起手指时往往会改变值。

我正在尝试安排它,以便您可以通过点击拇指上方或下方的滑块导轨将滑块向上或向下调整 0.1 个间隔。我确信这是可能的,但由于这是我的第一个 xcode 项目,我正在苦苦挣扎。谁能指出我正确的方向?

4

4 回答 4

4

我认为更好的解决方案就是继承 UISlider 并重新实现

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event

当触摸事件在滑块范围内时返回 YES。

于 2012-06-26T17:20:29.783 回答
2

iPhone OS 的 UISlider 控件的一个长期存在的问题是你不能让它更高。更具体地说,您可以通过为其拇指和轨道指定更高的图像来使其看起来更高,但触摸区域保持为 23 像素高。

您需要做的是子类 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 子类,您现在有了一个 43px 可触摸高度的滑块。

于 2010-07-01T00:10:23.710 回答
1

我想到了几个选项:

  1. 创建隐形按钮并放置它们以接收这些点击
  2. 继承 UISlider 并拦截 touchesBegan 等方法。确定是否要根据它的位置响应命中,或者调用 super 的函数。您可能需要扩展框架以包含您正在触摸的位置。

我不确定创建非标准(尤其是不可见!)实现是一个好主意,但是 - 我建议您添加可见按钮进行微调。一个简单的向上箭头/向下箭头可能会有所帮助。还要考虑 UISlider 是否是你想要的,因为它对你来说不够好。

于 2010-06-30T20:13:23.193 回答
0

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

CGRect sliderFrame = self.mySlider.frame;
sliderFrame.size.height = 42.0;
[self.mySlider setFrame:sliderFrame];
于 2011-02-17T08:33:50.967 回答