6

我正在尝试制作一个具有胖轨道的 UISlider。我试过这个,它几乎可以工作。但是,当UISlider第一次显示时,track bar是正常的。只有当它得到一个触摸事件时,它才会变得更厚。

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

- (CGRect)trackRectForBounds:(CGRect)bounds
{
    return bounds;
}

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

  1. 这是如何运作的?
  2. 我怎样才能控制它使轨道有多厚?
  3. 首次绘制 UISlider 时,如何使其影响轨道?

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

要考虑的另一件事:当它第一次显示时,我隐藏了拇指:

[slider setThumbImage:[[UIImage alloc] init] forState:UIControlStateNormal];

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

[slider setThumbImage:nil forState:UIControlStateNormal];

我提到这一点是因为我想知道这是否会以某种方式干扰 trackRectForBounds 魔法。

谢谢!

4

1 回答 1

4

问题1. 来自文档

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

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

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

return CGRectMake(0, 0, 500, 200);

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

于 2013-03-16T00:55:11.470 回答