如何获得 UISlider 的默认 maximumTrackTintColor
Posted
技术标签:
【中文标题】如何获得 UISlider 的默认 maximumTrackTintColor【英文标题】:How can I get the default maximumTrackTintColor for a UISlider 【发布时间】:2014-12-25 21:44:40 【问题描述】:我正在尝试使 UISlider 在右侧具有淡色,在左侧具有暗色(交换它们)
我能够在右侧获得正确的颜色
mySlider.maximumTrackTintColor = self.view.tintColor
但我不知道如何获得灰色以设置minimumTrackTintColor
。
我试过了
mySlider.minimumTrackTintColor = mySlider.maximumTrackTintColor
在我设置 maximumTrackTintColor
之前,但这不起作用,因为如果尚未设置自定义颜色,mySlider.maximumTrackTintColor
将返回 nil。
【问题讨论】:
我知道我可以做到UIColor.lightGrayColor()
,但默认颜色可能会在未来版本的 ios 中改变,所以我想以编程方式找出 UISlider 中使用的内容。
你想改变颜色的饱和度吗?
@LeonardoSavioDabus 默认情况下,拇指左侧的轨道为蓝色,右侧为灰色。我想拇指的左边是灰色的,右边是灰色的。但我不想将其设置为灰色;我想知道 UISlider 使用什么颜色并交换它们。
我知道这很愚蠢,但也许您可以将控件旋转 180 度并将委托回调中的值标准化?
@siejkowski 我想过,但如果他们在未来设置任何投影或类似效果,它会看起来很奇怪。
【参考方案1】:
好的,所以问题是您正在尝试获取 tintColor,但默认的 vanilla iOS8 非自定义 UISlider 没有使用 tintColor 来设置其颜色。
它正在使用 imageForState。
因此您可以使用slider.minimumTrackImageForState(UIControlState.Normal)!
和slider.maximumTrackImageForState(UIControlState.Normal)!
方法获取图像。
但是,为了更具防御性,我建议尝试两种方法:
let minimumColor = slider.minimumTrackTintColor
let maximumColor = slider.maximumTrackTintColor
let minimumImage = slider.minimumTrackImageForState(UIControlState.Normal)
let maximumImage = slider.maximumTrackImageForState(UIControlState.Normal)
if let minimumColor = minimumColor
slider.maximumTrackTintColor = minimumColor
else if let minimumImage = minimumImage
slider.setMaximumTrackImage(minimumImage, forState: .Normal)
else
// ok, something has changed the big way, just fallback on some color you like
if let maximumColor = maximumColor
slider.minimumTrackTintColor = maximumColor
else if let maximumImage = maximumImage
slider.setMinimumTrackImage(maximumImage, forState: .Normal)
else
// ok, something has changed the big way, just fallback on some color you like
结果是(前上图,后下图):
【讨论】:
很好地发现它使用的是图像,而不是色调。但是您的代码似乎只是使轨道变厚,它不会交换颜色 @Grezzo 您能否提供更多信息?我已经用我得到的结果更新了答案,似乎它确实交换了颜色并且不会使轨道变厚。你的代码是什么?为状态设置正确的图像后,您看到了什么? 我使用了您的代码,但将slider
更改为我的滑块 IBOutlet(称为 rightSlider
)。我记录了最小/最大颜色/图像,都是nil
。我将“某事已更改”注释更改为记录的字符串,并最终被记录。
我用你的代码做了一个简单的项目(这对我不起作用)并将它贴在 GitHub 上:github.com/Grezzo/SliderSwap
@Grezzo 非常感谢!似乎无论出于何种原因slider
在屏幕上显示之前都没有设置图像。将代码移动到viewDidAppear
可以正确报告所有值。我真的不知道为什么会这样 - 它可能是 UISlider
类的实现细节。以上是关于如何获得 UISlider 的默认 maximumTrackTintColor的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UISlider 拇指图标:如何阻止拇指图标在拖动时恢复为默认圆形图标?