【发布时间】: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