10

我的目标是为拇指图像创建一个高度为 35 像素的更大 UISlider。

我将 UISlider 子类化并添加了方法:

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50);
}

然后我使用 setThumbImage 从我的控制器设置 thum 图像:

我的大拇指显示得很好。

我遇到的问题是跟踪区域在 19 px 高度左右仍然相同,如何将其扩展到 50 ?

谢谢

T。

4

4 回答 4

31

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

Michael Patricios 发布了一种使默认滑块更容易触摸的方法,并且该技术的一种变体可以处理更大的滑块。您需要做的是子类 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:01:03.653 回答
11

我正在使用这个解决方案:)

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];
于 2012-05-30T23:00:31.617 回答
9

通过增加 UISlider 框架的高度来增加 UISlider 拇指点击区域。这种方法避免了任何偏移以及随后需要校正滑块框架。

- (void)viewDidLoad{
    [super viewDidLoad];

    //expand slider hit area
    self.slider.frame = CGRectInset(self.slider.frame, 0, -10);

}
于 2013-07-22T21:41:22.837 回答
0

我相信你可能想看看thumbRectForBounds:trackRect:value:

于 2010-04-30T19:37:08.360 回答