饼图
适用于 iOS 的易于使用和高度可定制的饼图库
Swift 4.2, iOS 8+
功能
- 可定制的切片
- 使用简单的 UIView 添加叠加层
- 交互式
- 动画
- 动态插入切片
- 通过可扩展图层系统重用组件
- 支持在 Interface Builder 中配置
- 图例。这是在单独的项目中以保持内容专注和可重用为目的。
安装
CocoaPods
添加到您的 Podfile
use_frameworks!
pod 'PieCharts'
Carthage
添加到您的Cartfile中
github "i-schuetz/PieCharts"
使用方法
基本图表
@IBOutlet weak var chartView: PieChart!
chartView.models = [
PieSliceModel(value: 2.1, color: UIColor.yellow),
PieSliceModel(value: 3, color: UIColor.blue),
PieSliceModel(value: 1, color: UIColor.green)
]
可在界面构建器中配置,并实时更新视图
叠加层
叠加层通过层实现。存在多个内置层,并可以自定义层。
要添加文本,例如在切片内添加文本标签和外部带有线条的文本,请根据以下步骤操作:
chartView.layers = [PiePlainTextLayer(), PieLineTextLayer()]
每个层都有自己定制的选项。例如,在此处我们自定义了纯文本层
let textLayerSettings = PiePlainTextLayerSettings()
textLayerSettings.viewRadius = 55
textLayerSettings.hideOnOverflow = true
textLayerSettings.label.font = UIFont.systemFont(ofSize: 8)
let formatter = NumberFormatter()
formatter.maximumFractionDigits = 1
textLayerSettings.label.textGenerator = {slice in
return formatter.string(from: slice.data.percentage * 100 as NSNumber).map{"\($0)%"} ?? ""
}
let textLayer = PiePlainTextLayer()
textLayer.animator = AlphaPieViewLayerAnimator()
textLayer.settings = textLayerSettings
这是自定义视图层,使其能够创建自定义视图
let viewLayer = PieCustomViewsLayer()
let settings = PieCustomViewsLayerSettings()
settings.viewRadius = 135
settings.hideOnOverflow = false
viewLayer.settings = settings
viewLayer.viewGenerator = {slice, center in
let myView = UIView()
// add images, animations, etc.
return myView
}
交互性和事件
遵守PieChartDelegate
以响应交互和其他事件
func onGenerateSlice(slice: PieSlice)
func onStartAnimation(slice: PieSlice)
func onEndAnimation(slice: PieSlice)
func onSelected(slice: PieSlice, selected: Bool)
动态切片插入
chartView.insertSlice(index: 1, model: PieSliceModel(value: 5, color: UIColor.blue))
贡献
- 分支
- 将更改提交到你分支的分支中
- 推送你的代码并创建一个合并请求
展望
可以将层系统进一步抽象,以便将这些切片本身放在一层中。这样,我们可以将多个切片层组合起来,创建更复杂类型的饼图。
鸣谢
示例中使用的食物图片来自freepik.com,flaticon.com/authors/madebyoliver
创建者
Ivan Schütz
许可证
SwiftCharts受版权保护(c)2017 Ivan Schütz,并在附件中以开源的形式发布,遵循Apache 2.0许可证。
本软件按“现状”提供,不提供任何保证,无论是明示的还是隐含的,包括但不限于适销性、特定目的适用性和非侵权性保证。
在任何情况下,作者均不对任何索赔、损害或其他责任负责,无论这些责任是因合同、侵权或其他方式而产生的,无论这些责任是否源自、与软件相关、由软件使用或其他使用相关。
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,