Skip to content

Instantly share code, notes, and snippets.

@takkumattsu
Created May 25, 2022 03:53
Show Gist options
  • Save takkumattsu/36c1acb5a2dd8fc0c500b125d2872553 to your computer and use it in GitHub Desktop.
Save takkumattsu/36c1acb5a2dd8fc0c500b125d2872553 to your computer and use it in GitHub Desktop.
CombinedChartRendererが公開しているsubRenderersだとdataを設定した際に初期化されてしまうので_renderersを利用しているところを外から設定できるようにした
/// 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