From dc0ef8c13b5fc1cc29d8f3bffa554c99ebc9c3f5 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Ansary Date: Sun, 12 Mar 2023 11:02:54 +0330 Subject: [PATCH 1/3] feat: Add radar highlight indicator to LineScatterCandleRadarChartDataSet --- .../LineScatterCandleRadarChartDataSet.swift | 23 +++++++++++++ ...atterCandleRadarChartDataSetProtocol.swift | 16 ++++++++++ .../LineScatterCandleRadarRenderer.swift | 32 +++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift b/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift index 1392cd2465..bcbc4f4aa3 100644 --- a/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift +++ b/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift @@ -23,12 +23,24 @@ open class LineScatterCandleRadarChartDataSet: BarLineScatterCandleBubbleChartDa /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. open var drawVerticalHighlightIndicatorEnabled = true + + /// Enables / disables the horizontal radar highlight-indicator. If disabled, the indicator is not drawn. + open var drawHorizontalHighlightRadarIndicatorEnabled = true + + /// Enables / disables the vertical radar highlight-indicator. If disabled, the indicator is not drawn. + open var drawVerticalHighlightRadarIndicatorEnabled = true /// `true` if horizontal highlight indicator lines are enabled (drawn) open var isHorizontalHighlightIndicatorEnabled: Bool { return drawHorizontalHighlightIndicatorEnabled } /// `true` if vertical highlight indicator lines are enabled (drawn) open var isVerticalHighlightIndicatorEnabled: Bool { return drawVerticalHighlightIndicatorEnabled } + + /// `true` if horizontal highlight radar indicator lines are enabled (drawn) + open var isHorizontalHighlightRadarIndicatorEnabled: Bool { return drawHorizontalHighlightRadarIndicatorEnabled } + + /// `true` if vertical highlight radar indicator lines are enabled (drawn) + open var isVerticalHighlightRadarIndicatorEnabled: Bool { return drawVerticalHighlightRadarIndicatorEnabled } /// Enables / disables both vertical and horizontal highlight-indicators. /// :param: enabled @@ -37,6 +49,15 @@ open class LineScatterCandleRadarChartDataSet: BarLineScatterCandleBubbleChartDa drawHorizontalHighlightIndicatorEnabled = enabled drawVerticalHighlightIndicatorEnabled = enabled } + + /// Enables / disables both vertical and horizontal radar highlight-indicators. + /// :param: enabled + open func setDrawHighlightRadarIndicators(_ enabled: Bool) { + drawHorizontalHighlightIndicatorEnabled = enabled + drawVerticalHighlightIndicatorEnabled = enabled + drawHorizontalHighlightRadarIndicatorEnabled = enabled + drawVerticalHighlightRadarIndicatorEnabled = enabled + } // MARK: NSCopying @@ -45,6 +66,8 @@ open class LineScatterCandleRadarChartDataSet: BarLineScatterCandleBubbleChartDa let copy = super.copy(with: zone) as! LineScatterCandleRadarChartDataSet copy.drawHorizontalHighlightIndicatorEnabled = drawHorizontalHighlightIndicatorEnabled copy.drawVerticalHighlightIndicatorEnabled = drawVerticalHighlightIndicatorEnabled + copy.drawHorizontalHighlightRadarIndicatorEnabled = drawHorizontalHighlightRadarIndicatorEnabled + copy.drawVerticalHighlightRadarIndicatorEnabled = drawVerticalHighlightRadarIndicatorEnabled return copy } diff --git a/Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift b/Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift index 25325e0366..7bed7b9585 100644 --- a/Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift +++ b/Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift @@ -23,14 +23,30 @@ public protocol LineScatterCandleRadarChartDataSetProtocol: BarLineScatterCandle /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. var drawVerticalHighlightIndicatorEnabled: Bool { get set } + + /// Enables / disables the horizontal radar highlight-indicator. If disabled, the indicator is not drawn. + var drawHorizontalHighlightRadarIndicatorEnabled: Bool { get set } + + /// Enables / disables the vertical radar highlight-indicator. If disabled, the indicator is not drawn. + var drawVerticalHighlightRadarIndicatorEnabled: Bool { get set } /// `true` if horizontal highlight indicator lines are enabled (drawn) var isHorizontalHighlightIndicatorEnabled: Bool { get } /// `true` if vertical highlight indicator lines are enabled (drawn) var isVerticalHighlightIndicatorEnabled: Bool { get } + + /// `true` if horizontal highlight radar indicator lines are enabled (drawn) + var isHorizontalHighlightRadarIndicatorEnabled: Bool { get } + + /// `true` if vertical highlight radar indicator lines are enabled (drawn) + var isVerticalHighlightRadarIndicatorEnabled: Bool { get } /// Enables / disables both vertical and horizontal highlight-indicators. /// :param: enabled func setDrawHighlightIndicators(_ enabled: Bool) + + /// Enables / disables both vertical and horizontal radar highlight-indicators. + /// :param: enabled + func setDrawHighlightRadarIndicators(_ enabled: Bool) } diff --git a/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift b/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift index dd33ffe862..4c51553b7b 100644 --- a/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift +++ b/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift @@ -32,6 +32,22 @@ open class LineScatterCandleRadarRenderer: BarLineScatterCandleBubbleRenderer if set.isVerticalHighlightIndicatorEnabled { context.beginPath() + + if set.isVerticalHighlightRadarIndicatorEnabled { + let colorTop = UIColor.white.cgColor + let colorBottom = UIColor.clear.cgColor + + var gradientOne = CGGradient(colorsSpace: .none, colors: [colorTop, colorBottom] as CFArray, locations: [0.0, 1.0])! + let startPointOne = CGPoint(x: point.x, y: point.y) + let endPointOne = CGPoint(x: point.x, y: viewPortHandler.contentBottom) + context.drawRadialGradient(gradientOne, startCenter: startPointOne, startRadius: 0.5, endCenter: endPointOne, endRadius: 0.5, options: .drawsAfterEndLocation) + + var gradientTwo = CGGradient(colorsSpace: .none, colors: [colorBottom, colorTop] as CFArray, locations: [0.0, 1.0])! + let startPointTwo = CGPoint(x: point.x, y: viewPortHandler.contentTop) + let endPointTwo = CGPoint(x: point.x, y: point.y) + context.drawRadialGradient(gradientTwo, startCenter: startPointTwo, startRadius: 0.5, endCenter: endPointTwo, endRadius: 0.5, options: .drawsBeforeStartLocation) + } + context.move(to: CGPoint(x: point.x, y: viewPortHandler.contentTop)) context.addLine(to: CGPoint(x: point.x, y: viewPortHandler.contentBottom)) context.strokePath() @@ -41,6 +57,22 @@ open class LineScatterCandleRadarRenderer: BarLineScatterCandleBubbleRenderer if set.isHorizontalHighlightIndicatorEnabled { context.beginPath() + + if set.isHorizontalHighlightRadarIndicatorEnabled { + let colorTop = UIColor.white.cgColor + let colorBottom = UIColor.clear.cgColor + + var gradientOne = CGGradient(colorsSpace: .none, colors: [colorBottom, colorTop] as CFArray, locations: [0.0, 1.0])! + let startPointOne = CGPoint(x: viewPortHandler.contentLeft, y: point.y) + let endPointOne = CGPoint(x: point.x, y: point.y) + context.drawRadialGradient(gradientOne, startCenter: startPointOne, startRadius: 0.5, endCenter: endPointOne, endRadius: 0.5, options: .drawsBeforeStartLocation) + + var gradientTwo = CGGradient(colorsSpace: .none, colors: [colorBottom, colorTop] as CFArray, locations: [0.0, 1.0])! + let startPointTwo = CGPoint(x: viewPortHandler.contentRight, y: point.y) + let endPointTwo = CGPoint(x: point.x, y: point.y) + context.drawRadialGradient(gradientTwo, startCenter: startPointTwo, startRadius: 0.5, endCenter: endPointTwo, endRadius: 0.5, options: .drawsBeforeStartLocation) + } + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: point.y)) context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: point.y)) context.strokePath() From a0b45c4564b4ce940cbb9d358057fd754552b0d3 Mon Sep 17 00:00:00 2001 From: MohammadReza Ansary Date: Sat, 17 Feb 2024 11:14:56 +0330 Subject: [PATCH 2/3] fix: build error --- Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift b/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift index 4c51553b7b..7c3db22fe3 100644 --- a/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift +++ b/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift @@ -11,6 +11,7 @@ import Foundation import CoreGraphics +import UIKit @objc(LineScatterCandleRadarChartRenderer) open class LineScatterCandleRadarRenderer: BarLineScatterCandleBubbleRenderer From df3ad87cc33545fd35ff72b1e5c869913c553922 Mon Sep 17 00:00:00 2001 From: MohammadReza Ansary Date: Mon, 8 Apr 2024 16:10:17 +0330 Subject: [PATCH 3/3] feat: set min and max Y of line chart view --- Source/Charts/Charts/LineChartView.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Charts/Charts/LineChartView.swift b/Source/Charts/Charts/LineChartView.swift index e7918266b2..ec110c4c8d 100644 --- a/Source/Charts/Charts/LineChartView.swift +++ b/Source/Charts/Charts/LineChartView.swift @@ -26,3 +26,12 @@ open class LineChartView: BarLineChartViewBase, LineChartDataProvider open var lineData: LineChartData? { return data as? LineChartData } } + +extension LineChartView { + + public final func setChartMinMaxYValues(chartYMin: Double, chartYMax: Double) { + let leftAxis = self.leftAxis + leftAxis.axisMaximum = chartYMax + leftAxis.axisMinimum = chartYMin + } +}