UISlider thumbTintColor在iOS 7上没有变化(在iOS 6上很好)

时间:2013-09-24 13:59:07

标签: ios objective-c ios6 ios7 uislider

我有一个在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始终位于主线程上,因此它不是线程问题。为什么我的拇指颜色不起作用?

谢谢,可以。

4 个答案:

答案 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下发表声明。如果maximumTrackTineColorthumbTintColor为零,则忽略这两个属性。所以我试着设置所有的色调,拇指还是白色。

我输入了一个关于此的错误报告 - #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)