我有一个在iOS 6上完美运行的应用程序。我通过这种方式为UISlider的拇指设置了闪烁效果:
-(void)startBlinkingSlider{
isSliderBlinking = YES;
isSliderTinted = NO;
[self performSelector:@selector(toggleSliderColor) withObject:nil afterDelay:0.2];
}
-(void)toggleSliderColor{
if(isSliderBlinking){
if(isSliderTinted){
self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
}else{
self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:255 green:0 blue:0 alpha:1];
}
isSliderTinted = !isSliderTinted;
[self performSelector:@selector(toggleSliderColor) withObject:nil afterDelay:0.2];
}
}
-(void)stopBlinkingSlider{
isSliderBlinking = NO;
isSliderTinted = NO;
self.effectAmountSlider.thumbTintColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
}
当我拨打startBlinkingSlider
时,我的滑块在iOS 6中开始闪烁红色。如果我在iOS 7设备上运行相同的应用程序,则没有任何反应。滑块的拇指保留其原始的白色。我在设置thumbTintColor
的行上设置了一个断点。在调试器中,这是我得到的:
(lldb) po self.effectAmountSlider.thumbTintColor
error: failed to get API lock
(lldb) po self.effectAmountSlider.thumbTintColor
UIDeviceRGBColorSpace 0 0 0 1
(lldb)
我键入了完全相同的代码,并在第一个中得到了一个奇怪的消息。但是,第二个结果是正确的。然后在将其设置为红色后,我也得到了正确的结果:
(lldb) po self.effectAmountSlider.thumbTintColor
UIDeviceRGBColorSpace 1 0 0 1
即使调试器显示正确的值,我也没有在滑块中看到任何视觉上的变化。它仍然是白色,颜色不会以任何方式改变。我在这里搜索了Apple的文档:https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/Controls.html
它没有说UISlider的thumbTintColor不能用作iOS 6。它应该按预期保持工作。我检查了线程,一切都在主线程上运行。 toggleSliderColor
始终位于主线程上,因此它不是线程问题。为什么我的拇指颜色不起作用?
谢谢,可以。
答案 0 :(得分:19)
我发现了一种解决方法。首先调用'setThumbImage:forState:'方法,'thumbTintColor'属性将生效。
[self.slider setThumbImage:[UIImage imageNamed:@"Thumb.png"]
forState:UIControlStateNormal];
self.slider.thumbTintColor = [UIColor blackColor];
我在iOS模拟器的7.0版(463.9.4.2)上对此进行了测试。
答案 1 :(得分:11)
我恰好今天早上再次阅读iOS 7 UI Transition Guide
,并在Slider
下发表声明。如果maximumTrackTineColor
或thumbTintColor
为零,则忽略这两个属性。所以我试着设置所有的色调,拇指还是白色。
我输入了一个关于此的错误报告 - #15277127 - 如果您输入自己的错误,请参考它。越多的bug报告苹果很快就会修复它。
编辑:Apple将我的错误归咎于另一个 - 这显然是在不久前知道的。答案 2 :(得分:10)
根据@ aaronsti的回答,我发现以下内容对我有用。将拇指图像设置为nil
无效。
[_slider setThumbImage:[_slider thumbImageForState:UIControlStateNormal] forState:UIControlStateNormal];
_slider.minimumTrackTintColor = minTintColor;
_slider.thumbTintColor = thumbTintColor;
答案 3 :(得分:2)
到目前为止,在Xcode 6.2,iOS 8.2中,问题仍然存在,并且解决方法仍然有效。 Swift版本:
slider.setThumbImage(slider.thumbImageForState(.Normal), forState:.Normal)