UISlider thumbTintColor在iOS 7上不会更改(在iOS 6上很好)

我有一个在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设备上运行相同的确切应用程序, startBlinkingSlider任何反应。 滑块的拇指保持原来的白色。 我在设置thumbTintColor的行上设置了一个断点。 在debugging器中,这是我得到的:

 (lldb) po self.effectAmountSlider.thumbTintColor error: failed to get API lock (lldb) po self.effectAmountSlider.thumbTintColor UIDeviceRGBColorSpace 0 0 0 1 (lldb) 

我input了完全相同的代码,并在第一个中得到了一个奇怪的消息。 但是,第二个结果是正确的。 然后设置为红色后,我也得到正确的结果:

 (lldb) po self.effectAmountSlider.thumbTintColor UIDeviceRGBColorSpace 1 0 0 1 

即使debugging器显示正确的值,我没有看到滑块的视觉变化。 它仍然是白色的,颜色不会以任何方式改变。 我在这里search了苹果的文档: https : //developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/Controls.html

它没有说任何有关UISlider的thumbTintColor不能作为iOS 6的工作。它应该保持按预期工作。 我已经检查了线程,一切都在主线程上运行。 toggleSliderColor总是在主线程上,所以它不是线程问题。 为什么我的拇指颜色不起作用?

谢谢,可以。

在@ aaronsti的回答的基础上,我发现以下为我工作。 将缩略图设置nil无效。

  [_slider setThumbImage:[_slider thumbImageForState:UIControlStateNormal] forState:UIControlStateNormal]; _slider.minimumTrackTintColor = minTintColor; _slider.thumbTintColor = thumbTintColor; 

我发现了一个解决方法。 通过首先调用“setThumbImage:forState:”方法,“thumbTintColor”属性将生效。

 [self.slider setThumbImage:[UIImage imageNamed:@"Thumb.png"] forState:UIControlStateNormal]; self.slider.thumbTintColor = [UIColor blackColor]; 

我在iOS模拟器的版本7.0(463.9.4.2)上testing了这个。

我刚好在今天上午再次阅读了iOS 7 UI Transition Guide ,并在Slider下的一个声明中绊倒了。 如果maximumTrackTineColorthumbTintColor是零,那么两个属性都将被忽略。 所以我试图设置所有的色调,拇指仍然是白色的。

我在这里input了一个错误报告 – #15277127 – 如果你input你自己的错误,请参考它。 越多的错误报告,苹果公司很快就会修复它。

编辑:苹果欺骗我的错误到另一个 – 这是显而易见的前一阵子。

到目前为止,在Xcode 6.2,iOS 8.2中,问题仍然存在,解决方法仍然有效。 Swift版本:

 slider.setThumbImage(slider.thumbImageForState(.Normal), forState:.Normal)