更大的UISlider确定但跟踪区域问题

时间:2009-09-16 23:24:13

标签: iphone uislider

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

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

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

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

我的大拇指很好地展示了。

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

由于

吨。

4 个答案:

答案 0 :(得分:31)

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

Michael Patricios has published a way使默认滑块更容易触摸,并且该技术的变体可以处理更大的滑块。你需要做的是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可触摸高度的滑块。

答案 1 :(得分:11)

我正在使用此解决方案:)

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

答案 2 :(得分:8)

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

- (void)viewDidLoad{
    [super viewDidLoad];

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

}

答案 3 :(得分:0)

我相信您可能需要查看thumbRectForBounds:trackRect:value: