我正在尝试制作一个有着厚重音轨的UISlider。我试过this,它几乎可以工作。但是,首次显示UISlider时,轨迹栏是正常的。只有当它获得触摸事件时才会变得更厚。
以下是我添加到UISlider子类中的代码,建议使用:
- (CGRect)trackRectForBounds:(CGRect)bounds
{
return bounds;
}
我不明白这是如何工作的,所以我无法弄清楚为什么它不能完美运作。以下是我的问题:
当然,第三个问题是最重要的,尽管其他问题会帮助我理解。
另外要考虑的事情是:首次显示时,我会隐藏拇指:
[slider setThumbImage:[[UIImage alloc] init] forState:UIControlStateNormal];
当用户触摸滑块时,我会像这样显示拇指:
[slider setThumbImage:nil forState:UIControlStateNormal];
我提到这个是因为我想知道这是否会以某种方式干扰trackRectForBounds魔法。
谢谢!
答案 0 :(得分:4)
问题1。来自the docs:
如果要自定义轨道矩形,可以覆盖它 方法并返回一个不同的矩形。返回的矩形是 用于在绘图过程中缩放轨迹和拇指图像。
此方法的默认实现返回的矩形小于传递的矩形。你只需返回它传递的内容,而不是先缩小它。
问题2。返回更大或更小的CGRect,例如:
return CGRectMake(0, 0, 500, 200);
问题3。我认为只有在未设置自定义图像时才会调用该方法,这就是为什么在将图像设置为nil
之前它无效。如果要覆盖图像,请尝试使用看起来符合您需要的实际图像覆盖滑块图像。