首次显示时如何使 UISlider 变粗?

Posted

技术标签:

【中文标题】首次显示时如何使 UISlider 变粗?【英文标题】:How to make UISlider thicker when it is first displayed? 【发布时间】:2013-03-15 23:23:14 【问题描述】:

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

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

- (CGRect)trackRectForBounds:(CGRect)bounds

    return bounds;

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

    这是如何工作的? 如何控制轨道的厚度? 如何让它在 UISlider 首次绘制时影响轨道?

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

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

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

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

[slider setThumbImage:nil forState:UIControlStateNormal];

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

谢谢!

【问题讨论】:

【参考方案1】:

问题1。来自the docs:

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

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

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

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

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

【讨论】:

美丽 - 很好的答案。不知道您是如何知道问题 1 中的“默认实现”的,但这说明了一切 - 谢谢! 典型的 *** 响应。

以上是关于首次显示时如何使 UISlider 变粗?的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义 UISlider 以使步骤可见

带有视觉跟踪弹出视图的 UISlider。隐藏在其他视图元素后面的弹出窗口

如何使 UISlider 匹配音频进度

自定义 UISlider 拇指图标:如何阻止拇指图标在拖动时恢复为默认圆形图标?

如何使 UISlider 以指数方式输出漂亮的舍入数字?

matplotlib:使加号变粗