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

Introduction of ios-chart in oss-labs#3

Embed Size (px)

Citation preview

Page 1: Introduction of ios-chart in oss-labs#3

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

山下大輔

Page 2: Introduction of ios-chart in oss-labs#3

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

• iOS,Unityエンジニア

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

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

Page 3: Introduction of ios-chart in oss-labs#3

What’s ViewMonitor

star数 558 (2016/01/22)

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

Page 4: Introduction of ios-chart in oss-labs#3

Unityについて

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

テスターを募集中!!

Page 5: Introduction of ios-chart in oss-labs#3

• star数 7053個の圧倒感

• グラフ描画ライブラリ

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

iOS-Chartについて

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

Page 6: Introduction of ios-chart in oss-labs#3
Page 7: Introduction of ios-chart in oss-labs#3

LineChartについて

こういうやつ

Page 8: Introduction of ios-chart in oss-labs#3

LineChartについて

LineChartView

BarLineChartViewBase

ChartViewBase

BarChartViewScatterChartView

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

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

Page 9: Introduction of ios-chart in oss-labs#3

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 } }

Page 10: Introduction of ios-chart in oss-labs#3

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 } }

グラフ描画用レンダラ

Page 11: Introduction of ios-chart in oss-labs#3

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

Page 12: Introduction of ios-chart in oss-labs#3

ソースコードまとめ

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