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

thi*_*ryb 10 iphone uislider

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

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

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

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

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

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

谢谢

T.

All*_*ike 31

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

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);
}
Run Code Online (Sandbox Code Playgroud)

在Interface Builder中,将滑块设置为使用新的UISlider子类,现在您有一个43px可触摸高度的滑块.

  • Kelan是正确的,-10的值很好. (3认同)
  • 小修正:我认为您希望将负SIZE_EXTENSION_Y值传递给CGRectInset以使矩形更大. (2认同)

小智 11

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

CGRect sliderFrame = self.mySlider.frame;    
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame];
Run Code Online (Sandbox Code Playgroud)


Bro*_*son 8

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

- (void)viewDidLoad{
    [super viewDidLoad];

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

}
Run Code Online (Sandbox Code Playgroud)


jes*_*rry 0

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

  • 不幸的是,UISlider 不使用此函数的返回来确定滑块拇指的触摸区域。 (2认同)