UISlider thumbTintColor doesn't change on iOS 7 (fine on iOS 6)

Can*_*ğlu 14 objective-c uislider ios ios6 ios7

I have an app that runs perfectly on iOS 6. I've set a blinking effect to a UISlider's thumb this way:

-(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];
}
Run Code Online (Sandbox Code Playgroud)

当我调用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) 
Run Code Online (Sandbox Code Playgroud)

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

(lldb) po self.effectAmountSlider.thumbTintColor
UIDeviceRGBColorSpace 1 0 0 1
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,可以.

aar*_*sti 19

我发现了一种解决方法.首先调用'setThumbImage:forState:'方法,'thumbTintColor'属性将生效.

[self.slider setThumbImage:[UIImage imageNamed:@"Thumb.png"] 
                  forState:UIControlStateNormal];
self.slider.thumbTintColor = [UIColor blackColor];
Run Code Online (Sandbox Code Playgroud)

我在iOS模拟器的7.0版(463.9.4.2)上测试了这个.


Dav*_*d H 11

iOS 7 UI Transition Guide今天早上又碰巧再读一遍,然后在一份声明中绊倒了Slider.如果EITHER maximumTrackTineColorOR thumbTintColor为nil,则忽略这两个属性.所以我试着设置所有的色调,拇指仍然是白色.

我输入了一个关于此的错误报告 - #15277127 - 如果您输入自己的错误,请参考它.越多的bug报告苹果很快就会修复它.

编辑:苹果公司将我的虫子骗到了另一个 - 这显然是在不久前知道的.

  • @canpoyrazoğlu你看不到其他的bug,但是你可以在你的bug中添加新的信息,说"相关的bug"或"将这个bug复制到<number".苹果可以更有效地复制错误,因为它们不必自己去寻找重复,而且重复次数越多,苹果就越有可能修复这个错误. (2认同)

小智 10

根据@ aaronsti的回答,我发现以下内容对我有用.将拇指图像设置为nil无效.

  [_slider setThumbImage:[_slider thumbImageForState:UIControlStateNormal] forState:UIControlStateNormal];
_slider.minimumTrackTintColor = minTintColor;
_slider.thumbTintColor = thumbTintColor;
Run Code Online (Sandbox Code Playgroud)

  • 第一行改变了一些东西,但是没有在`thumbImage`上得到正确的`UIColor`我有一个带渐变的颜色,每次我移动`UISlider`它都会变成正确的颜色,直到我不选择它.. (2认同)