// // HelloWorld.swift // SwiftCharts // // Created by ischuetz on 05/05/15. // Copyright (c) 2015 ivanschuetz. All rights reserved. // import UIKit import SwiftCharts class HelloWorld: UIViewController { fileprivate var chart: Chart? // arc override func viewDidLoad() { super.viewDidLoad() // map model data to chart points 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 } }