SwiftChart 1.0.1

SwiftChart 1.0.1

测试已测试
语言 SwiftSwift
许可证 MIT
发布最后发布2018年1月
SwiftSwift版本3.0
SPM支持SPM

Giampaolo Bellavite维护。



  • 作者:
  • Giampaolo Bellavite

SwiftChart

iOS上一个简单的折线/区域图表库,使用Swift编写。

📈折线和区域图表
🌞多个系列
🌒部分填充系列
🏊适用于有符号浮点数
🖖触摸事件

安装

手动

  1. 最新发布下载SwiftChart.zip,并将其内容解压到项目文件夹中。
  2. 从Xcode项目,从“文件”菜单中选择“将文件添加到…”并将解压的文件添加到项目中。

用法

库包括

  • 主类Chart,用于初始化和配置图表内容,例如添加系列或设置其外观
  • ChartSeries类,用于创建数据集并配置其外观
  • ChartDelegate协议,它告诉其他对象有关图表的触摸事件
  • ChartColor结构,包含一些预定义颜色

示例

let chart = Chart()
let series = ChartSeries([0, 6, 2, 8, 4, 7, 3, 10, 8])
series.color = ChartColors.greenColor()
chart.add(series)

要运行示例项目,克隆仓库,首先从示例目录运行pod install

初始化图表

从Interface Builder初始化

可以从Interface Builder初始化图表。将一个普通View拖动到ViewController中,并在身份检查器中将它设置为Chart自定义类

Example

可以从属性检查器设置图表外观的部分

通过编码

要编程初始化图表,请使用Chart(frame: ...)初始化器,它需要一个frame

let chart = Chart(frame: CGRect(x: 0, y: 0, width: 200, height: 100))

如果您想使用自动布局,请将框架设置为0,稍后再添加约束。

let chart = Chart(frame: CGRectZero)
// add constraints now

添加系列

在将系列添加到图表之前,请分别初始化它们。为此,传递一个数组来初始化一个ChartSeries对象。

let series = ChartSeries([0, 6.5, 2, 8, 4.1, 7, -3.1, 10, 8])
chart.add(series)

默认情况下,x轴上的值是传入数组的递进索引。您可以通过向系列初始化器传递一组(x: Float, y: Float)元组来自定义这些值。

// Create a new series specifying x and y values
let data = [(x: 0, y: 0), (x: 0.5, y: 3.1), (x: 1.2, y: 2), (x: 2.1, y: -4.2), (x: 2.6, y: 1.1)]
let series = ChartSeries(data)
chart.add(series)

多个系列

使用chart.add(series: ChartSeries)chart.add(series: Array<ChartSeries>)方法可以添加更多系列。这些系列将在图表的series属性中通过递进索引来识别。

部分填充系列

使用chart.xLabels属性将x轴宽度设置为超过实际数据。例如,

let chart = Chart(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
let data = [(x: 0.0, y: 0), (x: 3, y: 2.5), (x: 4, y: 2), (x: 5, y: 2.3), (x: 7, y: 3), (x: 8, y: 2.2), (x: 9, y: 2.5)]
let series = ChartSeries(data: data)
series.area = true
chart.xLabels = [0, 3, 6, 9, 12, 15, 18, 21, 24]
chart.xLabelsFormatter = { String(Int(round($1))) + "h" }
chart.add(series)

将渲染

触摸事件

要让图表响应用户触摸事件,请在您的类中实现ChartDelegate协议,作为一个视图控制器,并设置图表的delegate属性。

class MyViewController: UIViewController, ChartDelegate {
    override func viewDidLoad() {
        let chart = Chart(frame: CGRect(x: 0, y: 0, width: 100, height: 200))
        chart.delegate = self
    }
    
    // Chart delegate
    func didTouchChart(chart: Chart, indexes: Array<Int?>, x: Float, left: CGFloat) {
        // Do something on touch
    }
    
    func didFinishTouchingChart(chart: Chart) {
        // Do something when finished
    }

    func didEndTouchingChart(chart: Chart) {
        // Do something when ending touching chart
    }
}

didTouchChart方法传递一个索引数组,每个索引对应一个系列,可选的Int指代数据的索引。

 func didTouchChart(chart: Chart, indexes: Array<Int?>, x: Float, left: CGFloat) {
        for (serieIndex, dataIndex) in enumerate(indexes) {
            if dataIndex != nil {
                // The series at serieIndex has been touched
                let value = chart.valueForSeries(serieIndex, atIndex: dataIndex)
            }
        }
    }

您可以使用chart.valueForSeries()来访问触摸位置对应的值。

x: Float参数指代x轴的值:它由触摸事件的水平位置推断的,可能不是系列值的一部分。

left: CGFloat是图表视图上的x位置,从左侧开始。它可以用于设置标签的位置,使其位于图表上方。

常见问题和解决方案

如果您遇到这个问题库,请在Stack Overflow上为您的问题标记swiftcharts

图表未显示

类继承自UIViewChart类,所以如果图表没有显示,可能是视图大小相关的问题。检查您的视图约束,并确保在viewDidLoad中初始化它,Uikit可以计算视图尺寸。

一些调试隐藏图表的提示

  • 启动应用程序,然后在调试导航器中从Debug navigator调试UI Hierarchy
  • 初始化一个简单的带有彩色背景的UIView,而不是图表,以便更容易地看到视图的位置
  • 尝试不要在子视图中嵌套图表,以便更好地调试

参考

reference

图表类

图表选项

  • areaAlphaComponent – 区域颜色的alpha因子。
  • axesColor – 轴的颜色。
  • bottomInset – 包含x轴标签的图表底部区域的宽度。
  • delegate – 监听触摸事件的委托。
  • highlightLineColor – 突出显示线条的颜色。
  • highlightLineWidth – 突出显示线条的宽度。
  • gridColor – 栅格颜色。
  • labelColor – 标签的颜色。
  • labelFont – 标签使用的字体。
  • lineWidth - 图表的线宽。
  • maxX - 自定义的X最大值。
  • maxY - 自定义的Y最大值。
  • minX - 最小的X值。
  • minY - 最小的Y值。
  • topInset - 图表顶部的区域高度,作为填充以留出顶部Y轴标签的空间。
  • xLabelsFormatter - 格式化x轴上的标签。
  • xLabelsOrientation - 设置x轴标签的方位为垂直或水平。
  • xLabelsTextAlignment - x标签的文本对齐方式。
  • xLabelsSkipLast (默认 true) - 跳过最后的x标签。将其设置为 false 将会导致标签超出框架宽度,请谨慎使用!
  • yLabelsFormatter - 格式化y轴上的标签。
  • yLabelsOnRightSide – 将y标签放置在右侧。

方法

  • add(series: ChartSeries) – 向图表添加一个系列。
  • removeSeries() – 从图表中移除所有系列。
  • removeSeriesAtIndex(index: Int) – 在指定索引处移除一个系列。
  • valueForSeries() – 获取指定系列在指定索引处的值。

ChartSeries 类

  • area - 在系列线条下方绘制一个区域。
  • line - 设置为 false 来隐藏线条(用于仅绘制区域)。
  • color - 系列颜色。
  • colors - 一个元组,用于指定零以上或以下的颜色。例如,(above: ChartsColors.redColor(), below: ChartsColors.blueColor(), -4) 将在值大于 -4 时使用红色,在值小于 -4 时使用蓝色。

ChartDelegate

  • didTouchChart – 通知代理指定的图表已被触摸。
  • didFinishTouchingChart – 通知代理用户完成了图表的触摸。用户只有在向左或向右滑动图表外部时才会“完成”触摸图表。
  • didEndTouchingChart – 通知代理用户结束了图表的触摸。用户结束时将按顺序触摸Quando方法是调用的。

许可证

SwiftChart可使用MIT许可证获得。更多信息请参阅LICENSE文件。