Upload
daisuke-yamashita
View
1.134
Download
0
Embed Size (px)
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の勉強用コードリーディングの材料としてオススメ