SwiftCharts 0.6.5

SwiftCharts 0.6.5

测试已测试
语言语言 SwiftSwift
许可证 Apache-2.0
发布最后发布2019年3月
SPM支持 SPM

Ivan Schuetz 维护。



  • 作者
  • Ivan Schuetz

SwiftCharts

Version Carthage compatible License

SwiftCharts 是一个易于使用且高度可定制的 iOS 图表库

特性

  • 条形图 - 普通型,堆叠型,分组型,水平型,垂直型
  • 散点图
  • 线形图(直线/贝塞尔曲线/自定义路径生成器)
  • 面积图
  • 气泡图
  • 多轴
  • 蜡烛图
  • 每个值可以有多个标签(x 轴)
  • 所有内容均可自定义 - 颜色,视图,单位,标签,动画,交互,轴等。
  • 使用简单的 UIView,轻松创建任意标记、叠加、信息视图等。
  • 模块化架构,允许外部轻松创建新的图表类型或在现有类型上添加效果(无需更改库)。
  • 图表可以组合使用。
  • 饼图
  • 图例
  • 缩放和平移,可锁定到x/y轴,最大增量或两者均可。弹性效果。(未发布)
  • 可扩展的轴值和标签生成器,适用于数字、日期等,具有可自定义的缩放处理(美观数字,一分为二等)。(未发布)。

这些都是独立的仓库,以便更好地集中和复用。

iOS 7+

视频

文档

ScreenShot ScreenShot ScreenShot ScreenShot of Multi-chart touch tracking

ScreenShot

ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot ScreenShot

安装

CocoaPods

添加到您的 Podfile

use_frameworks!
pod 'SwiftCharts', '~> 0.6.5'

直接使用主干

pod 'SwiftCharts', :git => 'https://github.com/i-schuetz/SwiftCharts.git'

然后

pod install

在您的代码中导入框架

import SwiftCharts

Carthage

添加到您的 Cartfile

github "i-schuetz/SwiftCharts" ~> 0.6.5

贡献

我们非常欢迎贡献!要提交一项

  1. Fork(分支复制)
  2. 在您的Fork中分支更改
  3. 将您的代码提交并创建一个pull request(拉取请求)

快速开始

多行图

let chartConfig = ChartConfigXY(
    xAxisConfig: ChartAxisConfig(from: 2, to: 14, by: 2),
    yAxisConfig: ChartAxisConfig(from: 0, to: 14, by: 2)
)

let frame = CGRect(x: 0, y: 70, width: 300, height: 500)

let chart = LineChart(
    frame: frame,
    chartConfig: chartConfig,
    xTitle: "X axis",
    yTitle: "Y axis",
    lines: [
        (chartPoints: [(2.0, 10.6), (4.2, 5.1), (7.3, 3.0), (8.1, 5.5), (14.0, 8.0)], color: UIColor.red),
        (chartPoints: [(2.0, 2.6), (4.2, 4.1), (7.3, 1.0), (8.1, 11.5), (14.0, 3.0)], color: UIColor.blue)
    ]
)

self.view.addSubview(chart.view)

条形图

let chartConfig = BarsChartConfig(
    valsAxisConfig: ChartAxisConfig(from: 0, to: 8, by: 2)
)

let frame = CGRect(x: 0, y: 70, width: 300, height: 500)
        
let chart = BarsChart(
    frame: frame,
    chartConfig: chartConfig,
    xTitle: "X axis",
    yTitle: "Y axis",
    bars: [
        ("A", 2),
        ("B", 4.5),
        ("C", 3),
        ("D", 5.4),
        ("E", 6.8),
        ("F", 0.5)
    ],
    color: UIColor.red,
    barWidth: 20
)

self.view.addSubview(chart.view)
self.chart = chart

概念

  • 分层架构,使其极容易自定义图表,创建新类型、组合现有类型和添加交互元素。

  • 通过生成器函数创建视图,这使您在任意层中使用自定义视图变得容易。

主要组件

1. 层

图表是组合层的结果。一切都是一个层 - 轴,指导线,分隔符,线条,圆形等。这个想法是拥有松耦合的组件,可以轻松更改和组合。这是基本图表的结构示例,显示带有圆形的线条

ScreenShot

以下是一个更底层的示例,以便深入了解层系统。注意,大多数示例都是这样写的,以便提供最大的灵活性。

let chartPoints: [ChartPoint] = [(2, 2), (4, 4), (6, 6), (8, 8), (8, 10), (15, 15)].map{ChartPoint(x: ChartAxisValueInt($0.0), y: ChartAxisValueInt($0.1))}

let labelSettings = ChartLabelSettings(font: ExamplesDefaults.labelFont)

let generator = ChartAxisGeneratorMultiplier(2)
let labelsGenerator = ChartAxisLabelsGeneratorFunc {scalar in
    return ChartAxisLabel(text: "\(scalar)", settings: labelSettings)
}

let xGenerator = ChartAxisGeneratorMultiplier(2)

let xModel = ChartAxisModel(firstModelValue: 0, lastModelValue: 16, axisTitleLabels: [ChartAxisLabel(text: "Axis title", settings: labelSettings)], axisValuesGenerator: xGenerator, labelsGenerator: labelsGenerator)

let yModel = ChartAxisModel(firstModelValue: 0, lastModelValue: 16, axisTitleLabels: [ChartAxisLabel(text: "Axis title", settings: labelSettings.defaultVertical())], axisValuesGenerator: generator, labelsGenerator: labelsGenerator)

let chartFrame = ExamplesDefaults.chartFrame(view.bounds)

let chartSettings = ExamplesDefaults.chartSettingsWithPanZoom

// generate axes layers and calculate chart inner frame, based on the axis models
let coordsSpace = ChartCoordsSpaceLeftBottomSingleAxis(chartSettings: chartSettings, chartFrame: chartFrame, xModel: xModel, yModel: yModel)
let (xAxisLayer, yAxisLayer, innerFrame) = (coordsSpace.xAxisLayer, coordsSpace.yAxisLayer, coordsSpace.chartInnerFrame)

// create layer with guidelines
let guidelinesLayerSettings = ChartGuideLinesDottedLayerSettings(linesColor: UIColor.black, linesWidth: ExamplesDefaults.guidelinesWidth)
let guidelinesLayer = ChartGuideLinesDottedLayer(xAxisLayer: xAxisLayer, yAxisLayer: yAxisLayer, settings: guidelinesLayerSettings)

// view generator - this is a function that creates a view for each chartpoint
let viewGenerator = {(chartPointModel: ChartPointLayerModel, layer: ChartPointsViewsLayer, chart: Chart) -> UIView? in
    let viewSize: CGFloat = Env.iPad ? 30 : 20
    let center = chartPointModel.screenLoc
    let label = UILabel(frame: CGRect(x: center.x - viewSize / 2, y: center.y - viewSize / 2, width: viewSize, height: viewSize))
    label.backgroundColor = UIColor.green
    label.textAlignment = NSTextAlignment.center
    label.text = chartPointModel.chartPoint.y.description
    label.font = ExamplesDefaults.labelFont
    return label
}

// create layer that uses viewGenerator to display chartpoints
let chartPointsLayer = ChartPointsViewsLayer(xAxis: xAxisLayer.axis, yAxis: yAxisLayer.axis, chartPoints: chartPoints, viewGenerator: viewGenerator, mode: .translate)

// create chart instance with frame and layers
let chart = Chart(
    frame: chartFrame,
    innerFrame: innerFrame,
    settings: chartSettings,
    layers: [
        xAxisLayer,
        yAxisLayer,
        guidelinesLayer,
        chartPointsLayer
    ]
)

view.addSubview(chart.view)
self.chart = chart

层决定如何呈现其数据 - 这可以通过添加子视图、(CA)层、核心图形等来实现。

2. 视图生成器

基于视图的层将使用生成器函数来生成图表点视图。此函数接收每个图表点的完整状态(模型数据、屏幕位置)并生成一个UIView,允许任何类型的自定义。

你好世界

示例中包含了一个你好世界,类似于上面的代码,有一点更多的解释。更改生成视图的一些属性,复制粘贴上面代码段中使用的chartPointsLineLayer,并将其传递给图表层,以在视图后面显示线条,您就已经掌握了主要概念!

重要!

  • 别忘了始终保持对图表实例的强引用,否则它将被释放,从而导致轴和标签不显示。

  • 如果您图表中有许多轴标签,可能有必要在后台计算坐标空间,以避免在过渡或滚动期间可能出现的延迟。请参阅ScrollExample或MultipleAxesExample示例。

任务

SwiftCharts 现在有一些 项目 用于规划功能和改进。您可以随意抓住这些主题之一,即使是仅仅为了添加反馈。您可以为此打开一个问题。其他选项,如打开 Slack 频道,也是可能的。

创建者

伊万·施特茨

如果您需要特别的服务或只是时间紧迫,我也可以接受聘请

鸣谢

非常感谢在过去的几个月里赞助这个项目的棒的 grafiti.io,当然还要感谢所有 贡献者

许可

SwiftCharts 版权所有 (c) 2015 伊万·施特茨,并在附带的 Apache 2.0 许可 下作为开源软件发布。

软件按“原样”提供,不提供任何明示或暗示的担保,包括但不限于适销性、适用于特定目的和不侵犯知识产权的担保。在任何情况下,作者都不应对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他,源自、因之而产生或与此软件或软件的使用或其他交易有关。

这是将 obj-c 项目移至 Swift 并(大量改进)的移植,该作品是在我受雇于 eGym GmbH 时完成的 https://github.com/egymgmbh/ios-charts