ios - 拆分不同颜色的自定义 UIView
问题描述
我从情节提要制作了这个阶梯式进度条,并通过传递字符串数组(每个字符串添加一个步骤,因此标签和图标)以编程方式配置步骤数(最多 8 个)。
白色视图是基础视图,绿色视图是进度条,当然是 UIView。
要为进度设置动画,我只需设置进度条的宽度约束(我可以为指定步骤的百分比设置动画)。
现在,我的目标是将每个步骤的进度条分成不同的颜色:
例如,“Primo”步骤可以是蓝色,第二个步骤是红色等等,每个步骤都有不同的颜色。
我敢打赌我应该为进度条子类化 UIView 并在 draw 方法中发挥作用,但我的目标是将一系列步骤 (UIStackView) 传递给进度条并使用 setColor(forStep:1, color: .blue ) 给定指定步骤的 frame.width。
你可以帮帮我吗?
最好的。
解决方案
您可以在里面添加图层,UIView.layer
如下所示 -
class CustomProgress: UIView {
var layersCache: [Int: CALayer] = [:]
func setColor(forStep step: Int, color: UIColor) {
let stepLayer: CALayer
if let layer = layersCache[step] {
stepLayer = layer
} else {
stepLayer = CALayer()
layersCache[step] = stepLayer
}
let size = self.bounds.size
let stepWidth = size.width / 8 /// totalSteps
stepLayer.frame = CGRect(x: CGFloat(step) * stepWidth, y: 0, width: stepWidth, height: size.height)
stepLayer.backgroundColor = color.cgColor
self.layer.insertSublayer(stepLayer, at: 0)
}
}
推荐阅读
- javascript - 如何在三个js中多次高效渲染一个网格?
- c++ - 由于日志而导致程序阻塞
- python - 如何在bash中将前缀组合到ls的输出?
- javascript - 需要帮助填写所有必填字段并在页面右侧打印答案
- macos - mac os x 环境下对可执行应用程序文件进行签名的方法或技术有哪些?
- java - Mockito when() 需要一个参数,该参数必须是“模拟方法调用”错误
- c - 值变成空字符串
- c++ - 如何进行自动阵列检测?
- python - 如何使用 keras-self-attention 包可视化注意力 LSTM?
- php - Angular 8 到 PHP 后端