14

我有一个可以在 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

4 回答 4

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)上对此进行了测试。

于 2014-01-28T04:23:09.523 回答
11

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

我为此输入了一个错误报告 - #15277127 - 如果您输入自己的错误,请参考它。报告的错误越多,Apple 就越有可能很快修复它。

编辑:Apple 将我的错误欺骗了另一个错误 - 这显然是不久前就知道的。

于 2013-10-21T13:40:51.127 回答
10

根据@aaronsti 的回答,我发现以下内容对我有用。将 thumb-image 设置为nil无效。

  [_slider setThumbImage:[_slider thumbImageForState:UIControlStateNormal] forState:UIControlStateNormal];
_slider.minimumTrackTintColor = minTintColor;
_slider.thumbTintColor = thumbTintColor;
于 2015-02-09T17:37:11.457 回答
2

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

slider.setThumbImage(slider.thumbImageForState(.Normal), forState:.Normal)
于 2015-04-15T07:45:33.477 回答