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

时间:2013-03-15 23:23:15

标签: ios objective-c cocoa-touch uikit uislider

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

以下是我添加到UISlider子类中的代码,建议使用:

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

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

  1. 这是如何运作的?
  2. 如何控制音轨的厚度?
  3. 首次绘制UISlider时,如何让它影响轨道?
  4. 当然,第三个问题是最重要的,尽管其他问题会帮助我理解。

    另外要考虑的事情是:首次显示时,我会隐藏拇指:

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

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

    [slider setThumbImage:nil forState:UIControlStateNormal];
    

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

    谢谢!

1 个答案:

答案 0 :(得分:4)

问题1。来自the docs

  

如果要自定义轨道矩形,可以覆盖它   方法并返回一个不同的矩形。返回的矩形是   用于在绘图过程中缩放轨迹和拇指图像。

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

问题2。返回更大或更小的CGRect,例如:

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

问题3。我认为只有在未设置自定义图像时才会调用该方法,这就是为什么在将图像设置为nil之前它无效。如果要覆盖图像,请尝试使用看起来符合您需要的实际图像覆盖滑块图像。