如何在首次显示时使UISlider更厚?

Bob*_*Bob 6 cocoa-touch objective-c uikit uislider ios

我正在尝试制作一个有着厚重音轨的UISlider.我试过这个,它几乎可以工作.但是,首次显示UISlider时,轨迹栏是正常的.只有当它获得触摸事件时才会变得更厚.

这是我添加到我的UISlider子类中的代码,如下所示:

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return bounds;
}
Run Code Online (Sandbox Code Playgroud)

我不明白这是如何工作的,所以我无法弄清楚它为什么不能完美运作.这是我的问题:

  1. 这是如何运作的?
  2. 如何控制轨道的厚度?
  3. 首次绘制UISlider时如何使其影响轨迹?

当然,第三个问题是最重要的,尽管其他问题会帮助我理解.

还有一件事要考虑:首次显示时,我隐藏了拇指:

[slider setThumbImage:[[UIImage alloc] init] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

当用户触摸滑块时,我会像这样显示拇指:

[slider setThumbImage:nil forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

我提到这个是因为我想知道这是否会以某种方式干扰trackRectForBounds魔术.

谢谢!

Aar*_*ger 5

问题1. 来自文档

如果要自定义轨道矩形,可以重写此方法并返回不同的矩形。返回的矩形用于在绘制过程中缩放轨迹和缩略图图像。

此方法的默认实现返回一个比它传递的矩形更小的矩形。你的只是返回它所传递的内容,而不是先缩小它。

问题2. 返回一个更大或更小的CGRect,例如:

return CGRectMake(0, 0, 500, 200);
Run Code Online (Sandbox Code Playgroud)

问题3。 我认为只有在没有设置自定义图像的情况下才会调用该方法,这就是为什么在将图像设置为 之前它没有效果的原因nil。如果您想覆盖图像,请尝试使用看起来像您想要的方式的实际图像覆盖滑块图像。

  • 美丽 - 很好的答案。不知道你是如何知道问题 1 中的“默认实现”的,但这解释了一切 - 谢谢! (2认同)