Created
May 25, 2022 03:53
-
-
Save takkumattsu/36c1acb5a2dd8fc0c500b125d2872553 to your computer and use it in GitHub Desktop.
CombinedChartRendererが公開しているsubRenderersだとdataを設定した際に初期化されてしまうので_renderersを利用しているところを外から設定できるようにした
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// CombinedChartRendererが公開しているsubRenderersだとdataを設定した際に初期化されてしまうので_renderersを利用しているところを外から設定できるようにした | |
final class CustomCombinedChartRenderer: CombinedChartRenderer { | |
var customRenderers: [DataRenderer] = [] | |
override func initBuffers() { | |
customRenderers.forEach { $0.initBuffers() } | |
} | |
override func drawData(context: CGContext) { | |
// If we redraw the data, remove and repopulate accessible elements to update label values and frames | |
accessibleChartElements.removeAll() | |
if | |
let combinedChart = chart, | |
let data = combinedChart.data { | |
// Make the chart header the first element in the accessible elements array | |
let element = createAccessibleHeader(usingChart: combinedChart, | |
andData: data, | |
withDefaultDescription: "Combined Chart") | |
accessibleChartElements.append(element) | |
} | |
// Due to the potential complexity of data presented in Combined charts, a more usable way | |
// for VO accessibility would be to use axis based traversal rather than by dataset. | |
// Hence, accessibleChartElements is not populated below. (Individual renderers guard against dataSource being their respective views) | |
customRenderers.forEach { $0.drawData(context: context) } | |
} | |
override func drawValues(context: CGContext) { | |
customRenderers.forEach { $0.drawValues(context: context) } | |
} | |
override func drawExtras(context: CGContext) { | |
customRenderers.forEach { $0.drawExtras(context: context) } | |
} | |
override func drawHighlighted(context: CGContext, indices: [Highlight]) { | |
for renderer in customRenderers { | |
var data: ChartData? | |
if renderer is BarChartRenderer { | |
data = (renderer as! BarChartRenderer).dataProvider?.barData | |
} else if renderer is LineChartRenderer { | |
data = (renderer as! LineChartRenderer).dataProvider?.lineData | |
} else if renderer is CandleStickChartRenderer { | |
data = (renderer as! CandleStickChartRenderer).dataProvider?.candleData | |
} else if renderer is ScatterChartRenderer { | |
data = (renderer as! ScatterChartRenderer).dataProvider?.scatterData | |
} else if renderer is BubbleChartRenderer { | |
data = (renderer as! BubbleChartRenderer).dataProvider?.bubbleData | |
} | |
let dataIndex = data == nil ? nil : (chart?.data as? CombinedChartData)?.allData.firstIndex(of: data!) | |
let dataIndices = indices.filter { $0.dataIndex == dataIndex || $0.dataIndex == -1 } | |
renderer.drawHighlighted(context: context, indices: dataIndices) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment