iOS 7.1 中的 UISlider setMaximumTrackTintColor
Posted
技术标签:
【中文标题】iOS 7.1 中的 UISlider setMaximumTrackTintColor【英文标题】:UISlider setMaximumTrackTintColor in iOS 7.1 【发布时间】:2014-03-12 08:21:23 【问题描述】:[slider setMaximumTrackTintColor: color]
在 ios 7.1 中出现了意想不到的结果(滑块改变了它的位置,出现在顶部而不是垂直中心或完全消失),而在以前的版本中工作正常。
[slider setMinimumTrackTintColor: color]
确实呈现了预期的结果。
这个问题可能是相关的:UISlider setMaximumTrackTintColor, 但目前还没有答案。
更新:
我明白了: 而不是:
更新 #2:
使用setMaximumTrackImage
可能有效,但我正在寻找的解决方案是设置任何随机颜色而不是预先存在的图像。
更新 #3:
iOS 7.1.1 中仍然存在此问题。
【问题讨论】:
解释一下你得到了什么? 在括号中做了解释,但为了清楚起见还是添加了屏幕截图。 这是在 ios 7 中运行的吗? iOS 7.1。你读过我的问题吗? “虽然在以前的版本中运行良好” 表示是的,它适用于 iOS 7.0、6.1 等。 【参考方案1】:找到这个解决方法:
从UIColor
动态创建一个1x1px的UIImage
:
CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
[color setFill];
UIRectFill(rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
然后
[slider setMaximumTrackImage:image forState:UIControlStateNormal];
看起来像一个昂贵的解决方案,但它可以完成工作。
【讨论】:
谢谢...在 Apple 解决此问题之前,它可以完美地作为一种解决方法【参考方案2】:试试这个:
UIImage *sliderLeftTrackImage = [[UIImage imageNamed:@"LeftImage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *sliderRightTrackImage = [[UIImage imageNamed:@"RightImage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[sliderName setMinimumTrackImage: sliderLeftTrackImage forState: UIControlStateNormal];
[sliderName setMaximumTrackImage: sliderRightTrackImage forState: UIControlStateNormal];
如果您想更改拇指图像,以下代码将起作用:
[sliderName setThumbImage:[UIImage imageNamed:@"ThumbImgName.png"] forState:UIControlStateNormal];
[sliderName setThumbImage:[UIImage imageNamed:@"ThumbImgName.png"] forState:UIControlStateHighlighted];
同样,你也可以用颜色代替图片。
【讨论】:
这对我不起作用,我需要根据滑块值动态更改滑块的颜色。 我用颜色创建了图像,现在我设置图像。工作正常。 @MichalJuriJurník 你能发布你的解决方案吗?【参考方案3】:我用滑块轨道的颜色创建了 2px 的图像。
然后我将它们设置为跟踪图像(这里是 iPad 和 iPhone 的拇指图像)
UIImage *thumbImage = [UIImage imageNamed:@"slider"];
UIImage *trackImage;
if (isiPad)
[[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateNormal];
[[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateHighlighted];
trackImage = [UIImage imageNamed:@"menu-bar-ipad"];
else
[[UISlider appearance] setThumbImage:[self imageWithImage:thumbImage scaledToSize:CGSizeMake(27, 27)] forState:UIControlStateNormal];
[[UISlider appearance] setThumbImage:[self imageWithImage:thumbImage scaledToSize:CGSizeMake(27, 27)] forState:UIControlStateHighlighted];
trackImage = [UIImage imageNamed:@"menu-bar"];
[[UISlider appearance] setMinimumTrackImage:trackImage forState:UIControlStateNormal];
[[UISlider appearance] setMaximumTrackImage:trackImage forState:UIControlStateNormal];
仅此而已。我猜与 msmq 相同的解决方案。您可以看到如何制作大图像的两种方式 - 两种图像方式和缩放方式。
【讨论】:
感谢分享。我们在这里缺少的是动态因素。例如。滑块根据其值从红色变为绿色。 哦,对不起,现在我明白了。如果您需要具有一种绿色和一种红色的滑块,您可以更改最小和最大轨道图像。【参考方案4】:更新
报告了这个错误,它已经众所周知。希望他们能尽快修复它......
【讨论】:
我正在使用股票UISlider
类。 MPVolumeView
确实使用了 UISlider
对象,所以我们的问题是相关的。
是的,我知道。只是想澄清你想要达到的目标。我已经构建了一个使用 UISlider 并对其进行自定义的项目。但我不确定我是否自己设置了 MaxTintColor。我会检查这个并给出回应..
我试图在上面添加评论,但系统说我必须有 50 声望才能做到这一点。对不起
在我的例子中,色调颜色是在滑块的 Value Changed 事件中动态设置的。 (颜色根据滑块值从绿色变为红色)
不不,每个代码都使用标准 UISlider。这很奇怪,因为更改 minTrackTintColor 效果很好,例如 slider.value > .5f【参考方案5】:
可能有点晚了,但是 - 这是答案
你应该阅读setter的描述:
用于为标准最大轨迹图像着色的颜色。设置这个 属性删除与 滑块。
这也仅适用于maximum color
,因为minimum
setter 只需更改 titntColor:
用于为标准最小轨道图像着色的颜色。
这意味着滑块使用某些图像来最大程度地跟踪,如果您只设置色调颜色,则不会发生任何变化(没有什么不能被着色)。
解决方案(感谢@user623396):
UIImage *currentSliderMaximumImage = self.slider.currentMaximumTrackImage;
CGRect rect = CGRectMake(0, 0, currentSliderMaximumImage.size.width, currentSliderMaximumImage.size.height);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
[[[DynamicUIService service] currentApplicationColor] setFill];
UIRectFill(rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.slider setMaximumTrackImage:image forState:UIControlStateNormal];
结果你会得到
【讨论】:
以上是关于iOS 7.1 中的 UISlider setMaximumTrackTintColor的主要内容,如果未能解决你的问题,请参考以下文章