我有一个在 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
时,我的 slider 在 iOS 6 中开始闪烁红色。如果我在我的 iOS 7 设备上运行完全相同的应用程序,则没有任何反应。 slider 的拇指保留其原始的白色。我在设置 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
即使调试器显示了正确的值,我也没有在 slider 中看到任何视觉变化。它仍然是白色的,颜色没有任何变化。我在这里搜索了 Apple 的文档:https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/Controls.html
它没有说明 UISlider 的 thumbTintColor 不能作为 iOS 6 工作。它应该按预期保持工作。我检查了线程,一切都在主线程上运行。 toggleSliderColor
始终在主线程上,因此这不是线程问题。为什么我的拇指颜色不起作用?
谢谢,Can。
最佳答案
我发现了一个解决方法。通过首先调用“setThumbImage:forState:”方法,“thumbTintColor”属性将生效。
[self.slider setThumbImage:[UIImage imageNamed:@"Thumb.png"]
forState:UIControlStateNormal];
self.slider.thumbTintColor = [UIColor blackColor];
我在 iOS Simulator 7.0 (463.9.4.2) 版本上对此进行了测试。
关于ios - UISlider thumbTintColor 在 iOS 7 上没有改变(在 iOS 6 上很好),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983726/