Introduction of ios-chart in oss-labs#3

Preview:

Citation preview

地味ライブラリ紹介 ios-chartオープンソース勉強会

山下大輔

• 自己紹介 https://github.com/daisuke0131

• iOS,Unityエンジニア

• https://github.com/daisuke0131/ViewMonitor を作っています。星ください。PR下さい。

• 最近ゲームも作ってます。

What’s ViewMonitor

star数 558 (2016/01/22)

Natashaさんのキュレーションメディアに乗せてもらえた。 https://swiftnews.curated.co/issues/55

Unityについて

タイトル(未定) 3月中旬頃リリース予定

テスターを募集中!!

• star数 7053個の圧倒感

• グラフ描画ライブラリ

• MPAndroidChartにインスパイアされている。

iOS-Chartについて

https://github.com/danielgindi/ios-charts

LineChartについて

こういうやつ

LineChartについて

LineChartView

BarLineChartViewBase

ChartViewBase

BarChartViewScatterChartView

後ろのこういうやつ作ってる

・データのハンドリング ・アニメーションのハンドリング

iOS-Chartについて

public class LineChartView: BarLineChartViewBase, LineChartDataProvider { internal override func initialize() { super.initialize() renderer = LineChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) } internal override func calcMinMax() { super.calcMinMax() if (_deltaX == 0.0 && _data.yValCount > 0) { _deltaX = 1.0 } } // MARK: - LineChartDataProvider public var lineData: LineChartData? { return _data as? LineChartData } }

iOS-Chartについて

public class LineChartView: BarLineChartViewBase, LineChartDataProvider { internal override func initialize() { super.initialize() renderer = LineChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) } internal override func calcMinMax() { super.calcMinMax() if (_deltaX == 0.0 && _data.yValCount > 0) { _deltaX = 1.0 } } // MARK: - LineChartDataProvider public var lineData: LineChartData? { return _data as? LineChartData } }

グラフ描画用レンダラ

LineChartRendererの中身

LineChartDataProvider:データ型用のインターフェース@objc public protocol LineChartDataProvider: BarLineScatterCandleBubbleChartDataProvider { var lineData: LineChartData? { get } func getAxis(axis: ChartYAxis.AxisDependency) -> ChartYAxis }

internal func drawLinear(context context: CGContext, dataSet: ILineChartDataSet) {

.

.

. CGContextStrokeLineSegments(..)

}

LineChartRenderer

ソースコードまとめ

•継承によって責務が分けられており、追いかけやすかった。軽量なライブラリだとstructでガツっと作られたりとかmoduleで切り分けることが前提だったり。 •privateな変数をアンダーバーで記述してあるっぽい(private _name みたいな)。(object-cで絶滅したと思っていたが、まだやってる人いる?) •swiftの勉強用コードリーディングの材料としてオススメ

Recommended