【问题标题】:UISlider thumbTintColor doesn't change on iOS 7 (fine on iOS 6)UISlider thumbTintColor 在 iOS 7 上没有改变(在 iOS 6 上很好)
【发布时间】:2013-09-24 13:59:07
【问题描述】:

我有一个可以在 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 总是在主线程上,所以这不是线程问题。为什么我的拇指颜色不起作用?

谢谢,坎。

【问题讨论】:

  • 这对我来说就像一个错误。我只是在创建 UISlider 时尝试设置它的色调颜色,这比您使用闪烁所做的要简单得多,但是当我运行它时它一直呈白色。我很想知道这是一个确认的错误还是我们做错了什么。
  • @DavidH:我还没有提交错误报告,我只是推测这是一个错误。您在回答中引用的iOS 7 UI Transition Guide 的信息似乎表明这里发生了一些可疑的事情。我暂时被转移到了另一个项目,但是当我回到这个项目时,我会提交一份错误报告并复制你的。
  • 您可能应该将答案切换到 aaronsti's,因为它是解决问题的真正方法。我没有问题!
  • @DavidH 你说得对,我换了。

标签: ios objective-c ios6 ios7 uislider


【解决方案1】:

我发现了一个解决方法。首先调用 'setThumbImage:forState:' 方法,'thumbTintColor' 属性才会生效。

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

我在 iOS 模拟器 7.0 (463.9.4.2) 版上对此进行了测试。

【讨论】:

  • 我目前无法对其进行测试(该项目目前处于不可编译状态)但是否需要 Thumb.png 才能在我的项目中作为资产使用,或者如果未指定则默认使用它?
  • 是的,必须将 Thumb.png 添加到 Images.xcassets。如果在资产中找不到 Thumb.png,它将编译,但解决方法将不起作用,滑块的拇指仍将显示为白色。不必命名为 Thumb.png,而是任何您想要的图像名称。
【解决方案2】:

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

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

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

【讨论】:

  • 是的,这看起来确实是一个错误。我也输入了错误报告。 (虽然在错误报告器中我看不到除我之外的任何错误,所以我不知道如何参考)
  • @canpoyrazoğlu 贴出你的错误号,我会把我的复制到你的
  • 15199234。但是你怎么看别人的bug呢?
  • @canpoyrazoğlu 您看不到其他错误,但您可以在错误中添加新信息,说“相关错误”或“将此错误复制到
  • 确认,UISlider 在 iOS 7.1.2 和 Xcode 6.1 的 iPad Air 上没有显示。拇指色调在界面生成器中设置为默认(清除),当我手动将其设置为白色时,拇指出现了。 Min/Max Track Tint 一直是浅灰色。所以这个 bug 已经公开了一年多,Apple 没有解决。
【解决方案3】:

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

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

【讨论】:

  • 第一行改变了一些东西,但我没有在thumbImage 上获得正确的UIColor,而是使用渐变颜色,每次移动UISlider 时它都会更改为正确的颜色直到我不选择它..
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多