Cirque
Cirque是一个iOS组件,可以使用它来绘制带有颜色渐变过渡的多颜色圆圈。
为什么?
CAGradientLayer
目前仅支持线性渐变,而大多数解决方案仅支持两种颜色。然而,我们需要一个模块化、可配置的组件,可以处理任何数量的颜色以及任何大小。
示例
要运行示例项目,请先从仓库中克隆,然后在Example目录中首先运行pod install
首先创建一个实现CirqueDataType
的数据结构(一个enum
做出是有意义的),然后创建一个新的CirqueView
,并用一个CirqueDataType
数组的dataPoints
属性设置。
let cirque = CirqueView(frame: CGRect(x: 0, y: 0, width: 110, height: 110))
cirque.dataPoints = [RankingGroup.match(value: 0.3),
RankingGroup.achievements(value: 0.2),
RankingGroup.votes(value: 0.2)]
view.addSubview(cirque)
Boom
自定义
您可以通过微调来进一步自定义外观
属性 | 描述 | 默认值 |
---|---|---|
transitionSize |
一个介于0和1之间的Float ,表示用于从一种颜色过渡到下一种颜色的圆周百分比。 |
0.05 |
stepSize |
一个介于0和1之间的Float ,表示每个渐变步骤应填充的transitionSize 百分比。例如,值为0.1 时,每个颜色步骤是transitionSize 的10%,意味着总共有10个步骤。 |
0.1 |
lineWidth |
一个表示圆圈描边宽度的Float 。 |
5 |
工作原理
理念是尽可能多地使用普通笔触在贝塞尔弧上绘制。然后,当需要切换颜色时,绘制1/stepSize
个小弧段,每个小弧段都向下一个颜色靠近一步。以下是示意图
动画
我实现了一个可以动画显示圆圈进度,同时保持圆圈随其扩展而保持相对比例的工作原型。
挑战在于,为了绘制许多小的弧段,最实际的方法是直接在drawRect:
中完成,这意味着没有层可以动画化。
我的工作原型支持自定义持续时间和计时函数。如果您希望在此组件中直接支持此功能,请在这个问题中提出。
安装
Cirque可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中
pod "Cirque"
要求
- Xcode 8.0
- Swift 3.0+
作者
恩贝格先生,移动开发主管 @ Tonsser
贡献
非常欢迎贡献!
许可证
Cirque 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。