【发布时间】:2018-04-05 14:07:10
【问题描述】:
我有这个代表 0 到 5V 电压的水平条(矩形区域)。例如,如果电压为 2V,则条形图会以绿色填充到 2V 标记。
从0-2.1V,代表电压的区域颜色应该是绿色。从2.9-5V,颜色应该是红色的。
我想从 2.1 到 2.9 进行颜色过渡,从绿色变为红色。我尝试了从另一个 StackOverflow 主题获得的一种解决方案,但我不喜欢结果,因为光谱中有太多看起来不属于它们的颜色。
这里是那个解决方案(80 的范围是 2.90 - 2.10 = .80):
- (void)updateLayerProperties {
CGRect barRect = self.bounds;
barRect.size.width = (self.bounds.size.width * self.value)/3.5;
UIBezierPath *path = [UIBezierPath bezierPathWithRect:barRect];
self.barLayer.path = path.CGPath;
if (self.value >= 1.30 && self.value <= 1.70) {
self.barLayer.fillColor = [UIColor colorWithRed:((255 * (self.value - 1.00)) / 80)
green:((255 * (80 - (self.value - 1.00))) / 80)
blue:0
alpha:1.0].CGColor;
} else {
self.barLayer.fillColor = (self.value >= self.threshold) ? self.fullColor.CGColor : self.emptyColor.CGColor;
}
self.layer.borderWidth = self.borderWidth;
self.layer.borderColor = self.borderColor.CGColor;
self.layer.cornerRadius = 2.0f;
self.layer.masksToBounds = YES;
}
最初,我只有 0-2.5V 是绿色,2.5-5V 是红色......但这看起来很难看,所以我正在尝试这个。
是否可以使用某种类型的动画来代替根据电压值计算颜色?假设过渡间隙是 2.1 - 2.9,过渡应该知道如何在绿色和红色之间显示最佳颜色。谢谢。
【问题讨论】:
-
我建议(基于条宽 100,用于解释):绿色层从 0 -> 21;从 22 -> 28 的绿色到红色渐变层;红色层从 29 -> 100。然后将其遮盖到所需的宽度。
-
你知道我会怎么写出来吗?创建一个
CAGradientLayer对象?如果是这样,我将如何使用CAGradientLayer对象颜色设置barLayer.fillColor?谢谢
标签: ios animation uiview uibezierpath uicolor